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章 MEAN 简介
- 第2章 Node.js入门
- 第3章 使用Express开发Web应用
- 第4章 MongoDB入门
- 第5章 Mongoose入门
- 第6章 使用Passport模块管理用户权限
- 第7章 AngularJS入门
- 第8章 创建MEAN的CURD模块
- 第9章 基于Socket.io的实时通信
- 第10章 MEAN应用的测试
- 第11章 MEAN应用的调试与自动化
- 看完了