数据参考:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/manage_dml_intro_c.html#concept_ds_g2s_y1w_zj

  为了管理Cassandra上的数据,了解Casssandra是如何写入和读取数据、hint机制、一致性和非一致性是等数据库特性非常有必要的。在Cassandra中,一致性指的是如何使一行数据在所有的副本更新到最新数据保持同步。

  对于数据的存储和检索,Cassandra提供了客户端工具和应用程序编程接口(API)。

一、复制的作用

  Cassandra通过它的数据复制策略提供了高可用性的数据写入。Cassandra复制数据到多个节点以保证可靠性和容错。关系型数据库,另一方面,采用典型的表结构来保证数据的复制最小化。关系型的数据库服务器需要做额外的工作以保证整个表的数据完整性。在Cassandra中,维护表的完整性并不是个问题。Cassandra中的表是没有关联关系的。通常,在写入上,Cassandra比关系型数据库的性能要好。

二、关于写入路径

  当一个写入发生时,Cassandra把数据写在内存结构——memtable中,同时也会追加写到磁盘的commit log文件中,提供配置的持久性。

  commit log文件接收到每个发送到Cassandra节点的写入请求,并且这些持久的请求即使发生硬件故障也能生效。

  一个表使用的最多,memtable就会越大。Cassandra会动态分配合适的内存给memtable或者你也可以管理内存。当memtable的大小(包括索引)超过一个可配置的阈值,会被放到一个队列中等待被写入到磁盘中。你可以通过修改配置文件cassandra.yaml中的参数memtable_flush_queue_size配置队列的长度。如果数据超过了队列的大小,Cassandra会阻塞写入。memtable数据写入到磁盘的 SSTables文件会使用顺序I/O。当memtable写入到SSTable后,commit log文件中的对应数据会被清除。

  每个表会维护Memtable和SSTables。SSTables是只读不可改变的,当memtable写入数据后不能再写入了。通常,一行存储在多个SSTable文件中。

  对于每一个SSTable,Cassandra在内存结构中存储这些东西:

  •主键的indexA集合,每一行在数据文件中的开始位置。

  •索引的summaryA子集合。默认一个主键有128个。

三、Cassandra是如何存储数据的

  在memtable中,数据是有序组织的。

  为了更高效,在内存中或SSTable,Cassandra不会重复column的名字。例如,当下面的写请求发生时:

  write (k1, c1:v1)

  write (k2, c1:v1 C2:v2)

  write (k1, c1:v4 c3:v3 c2:v2)

  在memtable中, Cassandra存储数据的形式为:

  k1 c1:v4 c2:v2 c3:v3

  k2 c1:v1 c2:v2

  在磁盘的commit log文件中, Cassandra存储数据的形式为:

  k1, c1:v1

  k2, c1:v1 C2:v2

  k1, c1:v4 c3:v3 c2:v2

  在磁盘上的SSTable文件中, Cassandra在刷新memtable后存储数据,形式为:

  k1 c1:v4 c2:v2 c3:v3

  k2 c1:v1 c2:v2

四、关于索引的更新

  为了更新一个索引,Cassandra在commit log中追加数据,更新memtable,更新索引。当向一个表写入数据时,有索引需要比没索引做更多的工作Cassandra1.2之后更新的过程进行了提升。在高负载情况下采用同步锁以防止并发问题的需要已被删除。

  当column更新的时候,对应的索引也被更新。如果旧的值仍然在memtable中,典型的表现是更新一小部分数据集合,Cassandra会移除索引项。否则,旧的条目会被压紧。如果读数据的时候发现一个旧的索引在它被压紧前,读取线程会使之无效。

  和关系型数据库一样,建立索引并且保持同步更新不是一件轻松的事,所以应当避免没必要的索引。

Cassandra1.2文档学习(9)—— 数据写入的更多相关文章

  1. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  2. Cassandra1.2文档学习(8)—— 数据管理

    数据参考:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_manage ...

  3. Cassandra1.2文档学习(13)—— 数据读取

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  4. Cassandra1.2文档学习(11)—— 删除数据

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  5. Cassandra1.2文档学习(6)—— 客户端数据请求

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  6. Cassandra1.2文档学习(3)——数据分配和复制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  7. Cassandra1.2文档学习(10)—— 插入和更新数据

    参考数据:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  8. Cassandra1.2文档学习(15)—— 配置数据一致性

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...

  9. Cassandra1.2文档学习(14)—— 事务和并发控制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

随机推荐

  1. iOS开发——Swift篇&单例的实现

    Swift实现单例模式 Swift实现单例模式 由于Swift语言弱化了struct和class之间的界限,这里我分别给出自己写的两种的单例实现 class版本: class SwiftSinglet ...

  2. Android自定义标题TitleView

    Android开发过程中,经常遇到一个项目需要重复的定义相同样式的标题栏,Android相继推出了actionBar, toolBar, 相信有用到的朋友也会遇到一些不如意的时候,比如标题栏居中时,需 ...

  3. 我的开发框架(WinForm)2

    上篇文章简单的介绍了一下,我的一个开发框架.看的人还不少,多谢大家的关注,我继续介绍一下,模块和模块之间是怎么组织起来的. Data模块: 该模块主要完成对数据的操作,采用仓储模式实现,在核心模块(C ...

  4. RPM的基础命令/yum基本命令

    rpm的使用方式非常简单,常用的一些命令如下: 安装软件:rpm -ivh *.rpm 卸载软件:rpm -e 软件名 升级形式安装:rpm -U *.rpm 常用参数: -v 显示详细信息 -h 显 ...

  5. 项目移植过程中报:“Project facet Java version 1.7 is not supported.” 错误

    转载: http://my.oschina.net/nly/blog/349081 在移植eclipse项目时,如果遇到 报:“Project facet Java version 1.7 is no ...

  6. 实例化的两种方法(new和函数法)

    // 定义类 类名字是 classA  function classA(){      this.b=1;  }  classA.prototype.b=44;  classA.prototype.s ...

  7. Better Completion插件使用

    最近学习Bootstrap,发现Sublime text2不支持Bootstrap的代码提示,所以得装一个Bootstrap的代码提示插件.试了好几个之后发现Better-Completion最方便, ...

  8. Lua - 基础语法

    Hello World 交互式编程 Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用: [huey@huey-K42JE lua]$ lua Lua 5.1.4 Copyright ...

  9. ACM——Quicksum

    Quicksum 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:615            测试通过:256 描述 A chec ...

  10. RSA算法使用介绍

    http://www.cnblogs.com/AloneSword/p/3326750.html RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那 ...