大学生对校园网站建设的需求是什么,vue做的小网站,网络宣传策划方案,设计与绘制一个网站首页Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族#xff08;Column Family#xff09;的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Googles BigTable 的数据结构和功能特点#xff0c;采用 Memtable 和 SSTable 的方式进行存储。在 Cassandra 写入数据之前Column Family的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Googles BigTable 的数据结构和功能特点采用 Memtable 和 SSTable 的方式进行存储。在 Cassandra 写入数据之前需要先记录日志 ( CommitLog )然后数据开始写入到 Column Family 对应的 Memtable 中Memtable 是一种按照 key 排序数据的内存结构在满足一定条件时再把 Memtable 的数据批量的刷新到磁盘上存储为 SSTable 。 图 1. Cassandra 的数据模型图 Cassandra 的数据模型的基本概念Cluster : Cassandra 的节点实例它可以包含多个 KeyspaceKeyspace : 用于存放 ColumnFamily 的容器相当于关系数据库中的 Schema 或 database——类似mongodb里的namespace use xxxColumnFamily : 用于存放 Column 的容器类似关系数据库中的 table 的概念SuperColumn 它是一个特列殊的 Column, 它的 Value 值可以包函多个 ColumnColumnsCassandra 的最基本单位。由 name , value , timestamp 组成下面是关于数据模型实例分析 : 图 2. 数据模型实例分析 说明 (1) column family插入数据的方法 (2) Super column family插入数据的方法 从上图可以看出SCF能够支持5维数据空间分别为keyspacecolumn familysuper key key column name。 下面摘自http://www.justinablog.com/archives/882 可以看到和上文的描述是一致的 列Column 如果你对“列”的理解来自于关系型数据库那么很容易产生和我之前一样的误解以为Cassandra是把关系型数据库的行列进行了某种倒置而得到 的设计。其实不是这样的Cassandra的列是一组键值对它的结构如下图所示事实上这个数据结构是Cassandra 0.7.0最新的2.0.3版本中ByteBuffer替代了byte[]long型的日期时间替代了IClock 使用JSON描述的列结构 {name: email, value: meexample.com, timestamp: 1274654183103300 } 超级列Super Column的结构 复合键Composite Keys 有时我们会遇到不同省份可能有同样的城市名称或不同的城市有重名的街道这时使用单一的城市名称或街道名称来作为Key就会无法识别。 Cassandra允许你使用Key1:Key2的结构来存储一对值作为Key一个常见的例子是使 用userid:lastupdate这样的结构来存储用户ID及最后登录时间。下面是一个例子 HotelByCity (CF) Key: city:state { key: Phoenix:AZ {AZC_043: -, AZS_011: -} key: San Francisco:CA {CAS_021: -} key: New York:NY {NYN_042: -} } 最后让我们来巩固一下Cassandra和关系型数据库的区别吧 没有查询语言No SQL (Structured Query Language)没有外键约束关系型数据库的最重要特征双重簇索引在关系型数据库中每个表只能指定一个簇索引其它的索引查询都会导致全表扫描但在Cassandra中我们可以有第二级的簇索引排序是在设计时决策Cassandra不支持Order By排序是需要设计时考虑而不是像在关系型数据库查询时刻使用Order By无数据结构约定这是Cassandra最大的优势在关系型数据库中我们设计数据库结构时总是慎之又慎但在Cassandra中不需要预先约定数据结构。本文参考自《Cassandra: The Definitive Guide》 Cassandra数据模型 Colum / Colum Family, SuperColum / SuperColum Family Column是数据增量最底层也就是最小的部分。它是一个包含名称name、值value和时间戳timestamp的三重元组。 下面是一个用JSON格式表示的column { // 这是一个Column name: emailAddress, value: arinexample.com, timestamp: 123456789 } 需要注意的是name和value都是二进制的技术上指byte[]并且可以是任意长度。 与HBase相比除了Colum/Colum Family外Cassandra还支持SuperColum/SuperColum Family。 SuperColum与Colum的区别就是标准Column的value是一个“字符串”而 SuperColumn的value是一个包含多个Column的map另一个细微的差别是SuperColumn没有时间戳。 { // 这是一个SuperColumn name: homeAddress, // 无限数量的Column value: { street: {name: street, value: 1234 x street, timestamp: 123456789}, city: {name: city, value: san francisco, timestamp: 123456789}, zip: {name: zip, value: 94107, timestamp: 123456789}, } } Column FamilyCF是某个特定Key的Colum集合是一个行结构类型每个CF物理上被存放在单独的文件中。从概念上看CF像数据库中的Table。 SuperColum Family概念上和Column FamilyCF相似只不过它是Super Colum的集合。 Colum排序 不同于数据库可以通过Order by定义排序规则Cassandra取出的数据顺序是总是一定的数据保存时已经按照定义的规则存放所以取出来的顺序已经确定了。另外Cassandra按照column name而不是column value来进行排序。 Cassandra可以通过Colum Family的CompareWith属性配置Colume值的排序在SuperColum中则是通过SuperColum Family的CompareSubcolumnsWith属性配置Colum的排序。 Cassandra提供了以下一些选BytesTypeUTF8TypeLexicalUUIDTypeTimeUUIDTypeAsciiType Column name识别成为不同的类型以此来达到灵活排序的目的。 本文转自张昺华-sky博客园博客原文链接http://www.cnblogs.com/bonelee/p/6278657.html如需转载请自行联系原作者