这里说的数据存储模式(Data Storage Schema),也就是数据库分类。通过:http://www.nosql-database.org可以查询到现在的NoSQL种类和数量。
NoSQL数据库存储模式主要涉及数据库建立的存放数据的逻辑结构,通俗的说就是数据结构。基本的数据查插删改等操作,数据处理对象,及在分布式状态下的一些处理模式。
键值(Key-Vaule)数据存储模式:
文档(Document)数据存储模式:
列族(Column Families)数据存储模式:
列族数据库 (Column Families Database)是为处理大数据而引入的分布式处理技术。列族数据库是典型的以列为单位的磁盘记录方式。
列族数据库的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间。
列族数据库本质上只有一种操作,就是插入,其更新操作是插入一个带有新的时间戳的行,而删除是插入一个带有插入标记的行。其主要操作是收集内存中一批数据,然后批量的写入硬盘,所以其写入的速度主要取决于硬盘传输的速度。Oracle则不同,因为他经常要随机读写,这样硬盘磁头需要不断的寻找数据所在,所以瓶颈在于硬盘寻道时间。因此列族数据库很适合寻找按照时间排序topn的场景
在逻辑层面,Oracle的空白字段可是是默认值null,占用磁盘空间。而在列族里什么都没有,空的地方和这个表没什么关系,不占用磁盘空间。
其查找数据的路线是这样的:命名空间-->行键-->列族名-->列名-->时间戳。某一行的某一列允许有多值,用时间戳也区分版本。
只能做简单的Key value查询,复杂的sql统计做不到;只能在row key上做快速查询。
日志即数据,数据就是日志,列族数据库更新时插入一行,删除也是插入一行,然后打上删除标记。
列族数据库存储结构基本要素:
命名空间:是列族数据库的顶级数据库结构,相当于传统数据库的表明。
行键:行键是用来唯一确定列族数据库中不同行数据区别的标识符。它的作用和传统数据库中行主键类似。但是六组数据库的行是虚的,只存在逻辑关系,因为其值是以列为单位存储的。另外行键还起到分区和排序作用,当列族的列存放于不同服务器的分区时,则行键起分区地址指向的标识作用。
列族:有若干列构成的一个集合成为列族。对于关系密集的列可以放在一个列族里,以提高查询速度。
列:列是列族数据库里的用来存放单个数值的数据结构。列的每个值都带有时间戳(time stamp),通过时间戳来区分值得版本。
总结:
列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
产品:Cassandra、HBase
有谁在使用:Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter(Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)
适用的场景
1. 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
2. 博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。
图(Graph)数据存储模式:
图指的是数学里的图论(Graph Theory),就是由若干给定的点及连接两点的线所构成的图形,通常用来描述某些事物之间的特定关系,用点代表事物,用两点间的线表示相应事物间具有的这种关系。
节点,边,属性构成了计算机里一个图存储的三要素。
图数据库存储结构基本要素:
节点(Node)
边(Edge)
属性(Attribute)
图(Graph)
基本数据操作:
建立(create),删除(delete),更新(update),移动(remove),合并(merge)
应用领域:
资料来源:《NoSQL数据库入门与实践》
网络资源