编者注:本文内容节选自作家兼独立顾问Dan Sullivan的新作《NoSQL for Mere Mortals》第15章。在本章中,Sullivan介绍了NoSQL数据库的主要四种类型,以及提出哪些应用适合哪种类型的见解。他还讨论了关系型数据库和NoSQL数据库设计的区别,以及这两种技术共同存在的必要性。如有兴趣购买,可登录Informit.com,输入优惠码AWDATA35,即可获得65折优惠。
在关系型数据库设计中,实体的结构和关系驱动设计,但NoSQL数据库设计并不是这样。当然,你也同样需要对实体和关系进行建模,但是与保持关系模型相比,性能更为重要。
关系性模型的出现与实际需求有关——数据的经常性异常以及新应用程序难以重用现有数据是其出现的主要原因。NoSQL数据库的出现也有其现实原因——具体来说,就是数据的规模已经无法满足日益增长的大量读写操作。
为了换取读写性能的提升,你可能会失去关系型数据库的一些功能,例如即时一致性以及ACID事务等(虽然并非总是如此)。
本书认为,查询是数据模型设计的主要驱动力。的确是如此,因为查询描述了数据的使用方式。要了解不同的NoSQL数据库是如何满足用户的需求,先理解查询不失为好的着手点。此外,你还需要了解其他因素,如:
读写操作的数量
对副本中不一致数据的容忍度
实体之间关系的性质及其影响查询模式的方式
对于可用性和灾难恢复的需求
对数据模型灵活性的需求
对于处理延迟的需求
接下来的部分将介绍一些应用实例以及根据不同需求选择合适的NoSQL数据库时所应遵循的标准。
如何选择键值型数据库(key-value databases)?
键值数据库适用于那些频繁读写,拥有简单数据模型的应用。键值数据库中存储的值可以是简单的标量值,如整数或布尔值,也可以是结构化数据类型,比如列表和JSON结构。
键值数据库通常具有简单的查询功能,允许你通过键来查找一个值。一般键值数据库都支持搜索功能,这提供了更高的灵活性。开发人员可以选择使用一些技巧,比如用枚举键来实现范围查询,但这些数据库通常缺乏对于文档、列族、图形数据库的查询功能。
键值数据库广泛应用于以下类型的应用:
从关系型数据库缓存数据来用于提高性能
对Web应用暂时性数据的追踪,例如购物车数据等
存储配置和用户数据信息的移动应用
需要存储图片和音频文件等较大对象的应用
如何选择文档型数据库(document databases)?
文档型数据库按照灵活性的标准设计。如果一个应用程序需要存储不同的属性以及大量的数据,那么文档数据库将会是一个很好的选择。例如,要在关系数据库中表示产品,建模者可以使用通用的属性和额外的表来为每个产品子类型存储属性。文档数据库却可以更为简单的处理这种情况。
文档数据库提供嵌入式文档,这对于非规范化非常有用。文档数据库将经常查询的数据存储在同一个文档中,而不是存储在不同的表中。
此外,文档数据库改善了键值数据库的查询功能和文档中基于属性的过滤功能。
由于其灵活性、高性能和易用性,文档数据库可能是目前***的NoSQL数据库。
这些数据库适用于如下一些用例,包括:
用于后台具有大量读写操作的网站
管理数据类型和变量属性,比如产品
跟踪元数据的变量类型
使用JSON数据结构的应用
使用类似结构套结构等非规范化数据的应用程序
微软Azure和Cloudant等云服务数据库同样提供了文档型数据库。
在接下来的文章中,我们将继续介绍如何选择NoSQL数据库的另外两大类型:列族数据库和图形数据库。