MEAN Web开发_【以色列】Amos Q. Haviv_AZW3_MOBI_EPUB_PDF_电子书(无页码)_【以色列】Amos Q. Haviv

内容节选

第4章 MongoDB入门 MongoDB是一个让人眼前一亮的新型数据库。近年来业内兴起的NoSQL潮流是一种有效的数据库解决方案,而MongoDB绝对是这一潮流的领头羊。源于Web应用的设计理念,强大的生产力,独一无二的数据模型,简易的可扩展架构,使得MongoDB成为Web开发人员进行数据持久化的最佳选择。从关系数据库转换到NoSQL解决方案是一个颇具挑战的工作,而理解MongoDB的设计目标则有助于简化这一过程。本章内容包括: 理解NoSQL和MongoDB的设计目标 MongoDB的BSON数据结构 MongoDB的集合与文档 MongoDB查询语言 MongoDB命令行工具的使用 4.1 NoSQL简介 在过去很长一段时间里,Web开发人员一般使用关系型数据库存储持久化数据。大多数开发人员已经掌握了某一种SQL解决方案,使用成熟的关系数据库存储规范化数据模型已成为标准。开发人员需要在应用的不同部分之间进行数据调度,对象关系映射便应运而生。但随着Web应用规模越来越大,开发人员面对的可扩展性问题越来越突出。为此,社区里出现了大量针对更高可用性、查询简便性和水平扩展性而设计的键值存储解决方案。这些新的数据存储方式越来越完善,也提供了很多关系型数据库的特性。在这一演变中,出现了各种存储设计模式,包括键值存储、列存储、对象存储以及最流行的文档存储。 在常见的关系数据库中,数据存储在不同的表中,表与表之间用主键和外键进行关联。程序在使用数据时,先使用各种SQL语句获取数据,再以一种类似层级对象的方式组织数据。与关系数据库的表格不同,面向文档的数据库直接使用JSON或XML之类的标准格式来存储层级组织的文档。 为了更好地理解,我们以一篇博客文章为例进行说明。如果用关系数据库,一般需要使用两张表,其中一个用于存储文章,另一个用于存储文章评论,结构类似于下图: 使用关系数据库存储的博客文章与评论 在应用中,可以使用MySQL对象关系映射类库,或者直接使用SQL语言查询文章记录与评论记录,构建出相应的博客文章对象。但在面向文档的数据库中,博客文章将会存储到单个文档中以供查询。以JSON存储的文档为例,博客文章可以以如下格式存储: { "title": "First Blog Post", "comments": [ ] } 上述例子揭示了面向文档数据库与关系数据库的主要不同。可以看出,在关系数据库中,数据存储在不同的表里,并通过表格的记录(行)来构建应用中的对象。然而,使用整体性的文档存储,不仅可以加快读取操作,读取完成后也不用重新构建对象。此外,面向文档的数据库还有很多其他优点。 在应用开发中,经常会碰到修改模型的问题。比如,给每篇博文添加新属性。如果用的是关系数据库存储,那么首先需要修改表格结构,再到应用的数据层给博文对象添加属性。如果存在多篇博文,那么还需要对每一篇都进行修改。这就是说,模型修改之后我们不仅要修改代码,还要用专门的验证程序验证所有代码。相反,面向文档的数据库往往是无模式的,如果要在某个集合中存储不同的对象,直接存储即可,不需要对数据库做任何修改。可能对于一些经验丰富的开发人员开说,无模式存储无疑是自找麻烦,但就自由度而言,该存储方式仍有很大优势。 以一个二手家具电商为例,产品表需要存储的内容非常复杂。椅子和壁柜具有一些共同的特点,比如木料类型。但对于壁柜,用户更关心的是壁柜门的个数,如果把椅子和壁柜存储在关系数据库的表里,要么用一张表存储,那将有很多字段是空的,要么用另一张表存储键值属性,再用实体-属性-值模式去对应。但如果使用无模式存储,就可以在一个集合中对不同对象定义不同属性。并且不同的对象还可以有类似于木料类型之类的通用属性,查询时也更加方便。无模式存储同时还意味着在应用内便可以强制修改数据结构,而不需要在数据库中操作,这将大大缩短开发过程。 大量针对不同问题的NoSQL解决方案通常都围绕着缓存和规模问题。在这些解决方案中,面向文档的数据库逐渐成为NoSQL潮流中的主流。它们使用简单,并提供独立的持久化存储,甚至开始在一些领域挑战传统关系数据库的统治地位。面向文档的数据库类型可谓百花齐放,而其中最显著的当属MongoDB。 4.2 MongoDB简介 2007年,Dwight Merriman和Eliot Horowitz创立了10gen,致力于开发一个更好地为Web应用提供服务的虚拟主机平台。平台以服务的形式提供托管,让开发人员能将精力放在开发上,而不是忙于硬件管理和基础设施扩展。但是很快他们发现,开发人员并不想放弃对基础设施的诸多控制。最终,他们将平台的各个部分分别进行了开源。 MongoDB是这些开源项目之一,它是一个基于文档的数据库解决方案。MongoDB的名字源于humongous。它在提供对复杂......

  1. 信息
  2. 致谢
  3. 前言
  4. 第1章 MEAN 简介
  5. 第2章 Node.js入门
  6. 第3章 使用Express开发Web应用
  7. 第4章 MongoDB入门
  8. 第5章 Mongoose入门
  9. 第6章 使用Passport模块管理用户权限
  10. 第7章 AngularJS入门
  11. 第8章 创建MEAN的CURD模块
  12. 第9章 基于Socket.io的实时通信
  13. 第10章 MEAN应用的测试
  14. 第11章 MEAN应用的调试与自动化
  15. 看完了