这里说的数据存储模式(Data Storage Schema),也就是数据库分类。通过:http://www.nosql-database.org可以查询到现在的NoSQL种类和数量。
NoSQL数据库存储模式主要涉及数据库建立的存放数据的逻辑结构,通俗的说就是数据结构。基本的数据查插删改等操作,数据处理对象,及在分布式状态下的一些处理模式。
键值(Key-Vaule)数据存储模式:
键值数据库(Key-Value Database)为一类轻量级结合内存处理为主的NoSQL数据库。轻量是因为存储数据结构特别简单,数据库系统本身规模比较小;其设计之初的目的是为了更快地实现对大数据的处理,以内存为主运行处理。
键值数据库的数据结构最早借鉴了一维数组(Array)的设计方法,如图:

左边一列为key,用来定位右边的数组值,右边一列为value
将两边的值类型放宽,例如字符串,blob等,就成了我们今天的键值数据库。
键内容必须唯一,用来索引和数据查找。
键值数据库主要运行在内存中,需要定期向硬盘写数据,使数据得到永久保存。数据量大的话,内存是有限的,就需要引入分布式处理方法。
键值数据库基本要素:
键(Key):起到唯一索引的作用,确保一个键值结构里的数据记录的唯一性。
值(Value):值是对应键相关的数据,通过键来获取,可以存放任意类型的数据。键值数据库的值由二进制大对象(Blob)进行存储,可以存放任意的数据,键值数据库无预定义数据类型的要求。
键值对(Key-Value Pair):键和值得组合就构成键值对。是一对一的映射关系。
命名空间(Namespace):命名空间是由键值对所构成的集合。

到这里大家可能看出来了,Namespace和Oracle中的table概念类似,如果在Oracle中创建一张两列的表,可以做出如下对比:

基本操作方式:
put:用于写或者更新键值对里指定地址的值。当指定地址无值,则插入;有值,则更新。
get:用于读键值存储里指定的值。如果无值,则返回错误。
delete:用于删除键值存储里指定的键和值。如果键值存储里没有该键,则返回错误。
键值存储的优缺点:
优点:
简单:数据结构中只有键和值,并成对出现,值在理论上可以存放任一数据,并支持大数据存储。
快速:以内存运行模式为主,数据处理快是其最大优势。
高效计算:数据结构简单化,数据集之间的关系简单化,再加上基于内存的数据集计算,分布式计算等,形成了高效计算的前提条件。
分布式处理:分布式处理能力使键值数据库具备了处理大数据的能力。
缺点:
对值进行多值查找功能很弱。
缺少约束容易出错。
不容易建立复杂关系。
根据其缺点可以看出来,很多查询,排序,统计等功能需要程序员在业务代码进行编程约束。
总结:
键值数据库就像在传统语言中使用的哈希表。你可以通过key来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。
产品:Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort
有谁在使用:GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow(Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)
适用的场景
储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。
不适用场景
1. 取代通过键查询,而是通过值来查询。Key-Value数据库中根本没有通过值查询的途径。
2. 需要储存数据之间的关系。在Key-Value数据库中不能通过两个或以上的键来关联数据。
3. 事务的支持。在Key-Value数据库中故障产生时不可以进行回滚。
待续......
文档(Document)数据存储模式:
列族(Column Families)数据存储模式:
图(Graph)数据存储模式:
资料来源:《NoSQL数据库入门与实践》
网络资源




