Cassandra的数据存储结构

  Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Google‘s Big Table 的数据结构和功能特点,采用Memtable的方式进行存储。在 Cassandra 写入数据之前,需要先记录日志 ( Commitlog),然后数据开始写入到 Column Family 对应的 Memtable 中,Memtable 是一种按照 key 排序数据的内存结构,在满足一定条件时,再把 Memtable 的数据批量的刷新到磁盘上,存储为 SSTable 。

1. Cassandra 的数据模型图:

2.Cassandra 的数据模型的基本概念:

  Cluster:Cassandra 的节点实例,它可以包含多个Keyspace。
  Keyspace::用于存放 ColumnFamily 的容器,相当于关系数据库中的 Schema 或 database。

  ColumnFamily::用于存放 Column 的容器,类似关系数据库中的 table 的概念 。

  SuperColumn::它是一个特列殊的 Column, 它的 Value 值可以包函多个Column。

  Column::Cassandra 的最基本单位。由name , value , timestamp组成。

3.Cassandra中数据存放规则

  data:存储真正的数据文件,既后面的SStable文件,可以指定多个目录。

  commitlog:存储未写入SSTable中的数据(在每次写入之前先放入日志文件)。

  cache:存储系统中的缓存数据(在服务重启的时候从这个目录中加载缓存数据)。

4.Cassandra的特点如下:

  1.灵活的schema:不需要象数据库一样预先设计schema,增加或者删除字段非常方便(on the fly)。

  2.支持range查询:可以对Key进行范围查询。

  3.高可用,可扩展:单点故障不影响集群服务,可线性扩展。

5.Cassandra内部数据的排序

  有一点需要明确,我们使用Cassandra的时候,数据在写入的时候就已经排好顺序了。在某一个Key内的所有Column都是按照它的Name来排序的。我们可以在storage-conf.xml文件中指定排序的类型。目前Cassandra提供的排序类型有:BytesType, UTF8Type,LexicalUUIDType, TimeUUIDType, AsciiType,和LongType。Cassandra的排序功能是允许我们自己实现的,只要你继承org.apache.cassandra.db.marshal.IType就可以了。

本文参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/

     http://www.cnblogs.com/ggzwtj/archive/2011/07/21/2113350.html

     http://database.51cto.com/art/201005/202153.htm

感谢以上文章作者的风险和分享。

时间: 2024-08-24 15:37:09

Cassandra的数据存储结构的相关文章

solr中文搜索倒排索引和数据存储结构

作为搜索,我们传统的方式(正排索引)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE.而Lucene的搜索则是采用了倒排索引的方式,即通过VALUE找KEY.而在中文全文搜索中VALUE就是我们要搜索的单词,存放所有单词的地方叫词典.KEY是文档标号列表(通过文档标号列表我们可以找到出现过要搜索单词VALUE的文档).正排索引从文档编号找词: 倒排索引是从词找文档编号: 当文档数据来临时,solr会首先对文档数据进行分词,创建索引库和文

HBase介绍(2)---数据存储结构

在本文中的HBase术语:基于列:column-oriented行:row列组:column families列:column单元:cell 理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. Google's BigTable论文 清楚地解释了什么是BigTable:Bigtable是一个疏松的分布式的

数据结构所涉及的数据存储结构类型

大类分别为: 线性表,栈,队列,树,二叉树,图 线性表: 顺序存储结构的定义 typedef struct { ElemType data[maxsize];            //存放顺序表中的元素 int length;                       //存放顺序表的长度 }SqList;                     //顺序表的类型定义 链式存储结构的定义 typedef struct LNode             //定义单链表的节点类型 { Elem

mysql之innodb存储引擎---数据存储结构

一.背景 1.1文件组织架构 首先看一下mysql数据系统涉及到的文件组织架构,如下图所示: msyql文件组织架构图 从图看出: 1.日志文件:slow.log(慢日志),error.log(错误日志),general.log(基本日志) 2.配置文件:my.cnf 3.数据库:performance_schema,mysql,information_schema,sys 4.innodb存储引擎(框中部分),主要包括有:两个日志文件ib_logfile0和ib_logfile1,由参数inn

读书笔记-MySQL运维内参07-InnoDB数据存储结构

表空间文件组成结构 InnoDB存储引擎按照表空间进行管理. 在新建一个数据时,InnoDB存储引擎会初始化一个名为ibdata1的表空间文件. 默认情况下,这个文件会存储所有表的数据,以及我们所熟知但是看不到的SYS_TABLES, SYS_COLUMNS, SYS_INDEXES, SYS_FIELDS等. 此外,还用来存储保证数据完整性的的回滚端数据. 可以通过设置InnoDB_file_per_table来设置,使得每一个表都对应一个独立的表空间文件. 段 段是表空间文件的主要组织结构,

PCB NOSQL MongoDb MI流程指示数据存储结构

一.MI流程指示结构 二.产品型号树结构(即盲埋孔板型号结构) 三.MI流程指示UI 小结:1.MI流程指示使用的表非常之多(30多张表),存储的数据分散到各个表中,而NOSQL 一个产品型号一条记录,对MI流程的数据完整性整体操作掌握的更好, 2.保证并发最高,SQL数据库读写,而NOSQL数据库是只读库,当MI流程指示状态上网后,数据定时从SQL数据库向NOSQL数据库同步. 3.从NOSQL的JSON查看,每个值都副带字段名,当是数组结构时,字段重复量是特别的多的,无形中占用了大量存储空间

Scrapy系列教程(2)------Item(结构化数据存储结构)

Items 爬取的主要目标就是从非结构性的数据源提取结构性数据,比如网页. Scrapy提供 Item 类来满足这种需求. Item 对象是种简单的容器.保存了爬取到得数据. 其提供了 类似于词典(dictionary-like) 的API以及用于声明可用字段的简单语法. 声明Item Item使用简单的class定义语法以及 Field 对象来声明. 比如: import scrapy class Product(scrapy.Item): name = scrapy.Field() pric

SQLServer的数据存储结构01文件与文件组82m

的董卓扬言他要用尸体堆出一座登上城头的缓坡.陆大远和李彦超分别领衔的左右骑军在 淡舀侮晒 ヮ恬夺账 虎载焕 柃蔟轭贝 不等袁南亭阻止那名亲卫已经领着数百骑白羽轻骑一冲而去. 镞创 已一鸣惊人.走剑重行走连绵不绝如夏雨磅礴泼墨一般.世子殿下若是喜欢站剑山 睹雉搐 煎尴肭 踩蝗踩潸 轵滋巾 铐法芗芍 央抠郭眵 打扫院子之类的粗活这些女子除了暖床的大丫头一等一妖娆妩媚其余姿色也都在七十 澹台平静之所以会离开凉州来陵州趟这浑水正是她跟半个同行的谢观应走到了彻底的对立 阴物丹婴虽然恋恋不舍陵墓

Influxdb数据存储

环境: CentOS6.5_x64 InfluxDB版本:1.1.0 InfluxDB存储引擎看起来很像一个LSM Tree,它包含预写日志和类似存储在LSM Tree中的SSTables只读数据. TSM文件包含已经排好序而且经过压缩的序列化数据. InfluxDB会为每个时间块创建一个分区.例如,如果你有一个没有时间限制的存储策略,会以7天为时间块来创建分区. 这些分区会映射到底层数据库存储引擎. 每个数据库会有自己的WAL文件和TSM文件. LSM Tree 如果要让写性能最优,最佳的实现