NoSQL精粹

进度

P40

笔记

影响NoSQL论文:Bigtable-2005,Dynamo-2007

关系型数据库并不是设计给集群用的。

CQL和SQL类似,但是差别很大。

NoSQL不使用SQL。

图数据库设计不是为了在集群上运行。分布模型和关系模型类似,但是数据模型却不同。

混合持久化观点:不同场景使用不同的存储方式。

选择NoSQL主要两个原因:1 数据量大,数据访问效率高,必须放到集群。 2 更方便数据交互方式提高程序开发效率。

选择NoSQL不一定是数据量大。阻抗失谐也是原因之一。

表和行在关系模型中叫 关系和元组。

关系模型和聚合模型。如何划分聚合边界,取决于如何操作数据,描述了应用程序使用数据方式。

键值:聚合不透明,必须获取全部聚合才行 文档:聚合透明,所以可以灵活访问数据,可以通过聚合字段查找,获取部分聚合。 列族:聚合分为列族,

列族:两级映射,get(id,"name")。和列存数据库不一样,如C-store,

列存(某一列),c-store支持关系型,column store,nosql之前就有了。 列族(一组列):bigtable,column family database

cassandra 行只能出现在同一个列族里面,列族可以包括超列,列里面可以嵌套列,cassandra中的supercolumn对应bigtable里面列族。

图数据库:重视关系,

宽行(许多列,每行不一样)和窄行(很少列,相同行较多)。

无模式的灵活性适用于聚合内部,聚合边界改动了,也会和关系型一样复杂。

关系型不存在聚合结构,所以可以用不同方式访问数据。聚合结构本质是查询结构。聚合结构定了,那么查询模式很有限。

程序需要处理和聚合结构不一样的查询:物化视图。关系型里面叫视图。

cassandra没有丰富的查询语言,所以设计数据模型适合,优化列和列族,以提高读取速度。CQL不支持join和subquery,where子句也很简单。

对比

关系型Riak(KV)MongoDB(Document)Cassnadra(Column Family)
数据库实例Riak集群MongoDB实例Cluster
模式 schemanamespacedatabasekeyspace
BucketCollectioncolumn family
key-valuedocumentrow
fieldcolumn
rowidkey_idrowkey
joinDBRef
存储字节BSON,XML,JSON
结构一维hash tableJSON多维hash table
适合场景会话信息,用户配置,购物车,关键字查询,无法通过属性查询接近关系型查询模型,事件记录,内容管理系统,博客平台,用户评论,用户注册,配置,面向web的文档,网站分析,实时分析,PV,UV,电商:产品和订单,灵活的模式事件记录,博客"tag","link","category",计数器,查询模式提前可知
不适合场景数据建关系,含有多项事务,查询数据,操作多个关键字多项复杂事务,跨文档原子操作,灵活持续变化的聚合结构,ACID,聚合(SUM,AVG),早期技术方案无法确定查询模式,查询模式变化,列族也要变化,改变查询模式比改变数据模式代价高

参考