数据参考: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. 10个你可能从未用过的PHP函数(转)

    1. sys_getloadavg() sys_getloadavt()可以获得系统负载情况.该函数返回一个包含三个元素的数组,每个元素分别代表系统再过去的1.5和15分钟内的平均负载. 与其让服务器 ...

  2. careercup-中等难度 17.5

    17.5 写一个函数来模拟游戏. 游戏规则如下: 4个槽,里面放4个球,球的颜色有4种,红(R ),黄(Y),绿(G),蓝(B).比如, 给出一个排列RGGB,表示第一个槽放红色球,第二和第三个槽放绿 ...

  3. 文件I/O之ioctl函数

    ioctl函数是I/O操作的杂物箱.不能用其他函数表示的I/O操作通常都能用ioctl表示.终端I/O是ioctl的最大使用方面. ioctl函数通过对文件描述符发送特定的命令来控制文件描述符所代表的 ...

  4. C# 之 Word光标移动 GoTo 方法

    对于 Document 或 Range对象:返回一个 Range对象,该对象代表指定项(例如页.书签或域)的开始位置. 对于 Selection对象:将插入点移至指定项前面的字符位置,并返回一个 Ra ...

  5. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  6. Azure PowerShell (二)云服务

    .  浏览云服务Get-AzureService | Select-Object -Property ServiceName, Location,`@{Name='ProdIP';Expression ...

  7. Java双向链表实现

    public class DoublyLinkList { private class Data{ private Object obj; private Data left = null; priv ...

  8. 计算openlayers两点之间的距离

    distanceTo: function(point) { var distance = 0.0; if ((this.x != null) && (this.y != null) & ...

  9. Android端手机测试体系

    1.冒烟测试 跟web端的测试流程一样,你拿到一个你们开发做出来的apk首先得去冒烟,也就是保证他的稳定性,指定时间内不会崩溃.这款原生sdk自带的monkey可以当做我们的测试工具.就跟我之前博客所 ...

  10. PeopleReady--办公学习类App产品

    PeopleReady是能使人(公司或组织里的员工)快速Ready(经验+知识)的学习系统.对员工的好处是:- 可以迅速Ready,尽快符合岗位要求,尽快有Performance,尽快对公司有价值,从 ...