【IT168技术】何为NoSQL?NoSQL 不是一个工具,而是由一些具有互补性和竞争性的工具组成的一个概念,是一个生态圈。这些被称为 NoSQL 的工具,在存储数据的方式上,提供了一种与(基于 SQL 语言的)关系型数据库截然不同的思路。要想了解 NoSQL,必须先了解现有的这些工具,去理解那些引导它们开拓出新的存储领域的设计思路。
NoSQL 其名
在给 NoSQL 下定义之前,我们先来试着从它的名字上做一下解读。顾名思义,NoSQL 系统的数据操作接口应该是非 SQL 类型的。但在 NoSQL 社区,NoSQL 被赋予了更具有包容性的含义,其意为 Not Only SQL,即 NoSQL 提供了一种与传统关系型数据库不同的存储模式,这为开发者提供了关系型数据库之外的另一种选择。
NoSQL 的启示
NoSQL 运动受到了很多相关研究论文的启示,在所有资料中,最核心的有两个:Google 的 BigTable 论文和 Amazon 的 Dynamo 论文。
特性概述
NoSQL 系统舍弃了一些 SQL 标准中的功能,取而代之的是一些简单灵活的功能。NoSQL 的构建思想就是尽量简化数据操作,尽量让操作的执行效率可预估。当你去考查一个 NoSQL 系统时,下面的几点是值得注意的。
①数据模型及操作模型:你的应用层数据模型是行、对象还是文档型的呢?这个系统是否能支持你进行一些统计工作呢?
②可靠性:当你更新数据时,新的数据是否立刻写到持久化存储中去了?新的数据是否同步到多台机器上了?
③扩展性:你的数据量有多大,单机是否能容下?你的读写量需求单机是否能支持?
④分区策略:考虑到对扩展性、可用性或者持久性的要求,你是否需要一份数据被存在多台机器上?你是否需要知道或者说你能否知道数据在哪台机器上?
⑤一致性:你的数据是否被复制到了多台机器上?这些不同节点的数据如何保证一致性?
⑥事务机制:业务是否需要 ACID 事务机制?
⑦单机性能:如果你打算持久化的将数据存在磁盘上,哪种数据结构能满足你的需求(你的需求是读多还是写多)?写操作是否会成为磁盘瓶颈?
⑧负载可评估:对于一个读多写少的应用,诸如响应用户请求的网络应用,我们总会花很多精力来关注负载情况。你可能需要进行数据规模的监控,对多个用户的数据进行汇总统计。你的应用场景是否需要这样的功能呢?
NoSQL 数据模型及操作模型
数据库的数据模型指的是数据在数据库中的组织方式,数据库的操作模型指的是存取这些数据的方式。通常数据模型包括关系模型、键值模型以及各种图结构模型。操作语言可能包括 SQL、键值查询及 MapReduce 等。NoSQL 通常结合了多种数据模型和操作模型,提供不一样的架构方式。
基于Key 值存储的 NoSQL 数据模型
在键值型系统中,复杂的联合查询以及满足多个条件的数据查询操作就不那么容易实现了,需要换一种思维来建立和使用键名。比如要获取部门号为 20 的所有员工的信息,应用层可以先获取 Key 为 employee_departments:20的这个列表,然后再循环地拿这个列表中的 ID 通过获取 employee:ID 得到所有员工的信息。