数据参考: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. paip.c++ 常用类库attilax总结

    paip.c++ 常用类库attilax总结 VCL: WINDOWS平台最好的类库了..推荐使用..开发效率最高. 1 QT..推荐使用..开发效率比较高. 1 GTK(GTKMM)...开发效率没 ...

  2. DTCC2016

    http://pan.baidu.com/share/home?uk=4043574767#category/type=0

  3. Java基础知识强化之IO流笔记64:合并流SequenceInputStream

    1. SequenceInputStream合并流的概述: SequenceInputStream类可以将多个输入流串联在一起,合并为一个输入流,因此,该流也被称为合并流.   2. Sequence ...

  4. 这五个题你懂了javascript你就入门了

    1. if (!("a" in window)) { var a = 1; } alert(a); 阅读代码:如果window不包含属性a,就声明一个变量a,然后赋值为1,最后弹出 ...

  5. FIFO分枝_限界算法

    问题: 检索4-皇后问题的状态空间树如下图的基本过程.(4-皇后问题解空间的树结构,结点按深度优先检索编号)  如果按序扩展这些结点,则下一个E-结点就是结点2.扩展结点2后生成结点3,8和13.利用 ...

  6. (原创)鸟哥linux学习script shell相关笔记

    在使用鸟哥linux进行script shell学习的过程中碰到一些不太明白的知识点,在这里进行一些记录 1. [root@www scripts]# vi sh03.sh #!/bin/bash # ...

  7. 通过spring来配置某个命令号和执行方法之间的映射

    整理的内容 1.手动获取spring的ApplicationContext和bean对象 写一个工具类实现ApplicationContextAware接口 2.反射的知识整理 3.前后端协议交互的时 ...

  8. vi删除多行,替换,复制

    VI中的多行删除与复制 法一: 单行删除,:1(待删除行)d 多行删除 ,:1,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行 ...

  9. 设计模式------PROTOTYPE(原型),TEMPLATE(模板)

    看链接:http://blog.csdn.net/wuzhekai1985/article/details/6667020.纯属为自己学习所使用. 对于原型模式的理解:就如连接中所说,制作简历时先手写 ...

  10. eclipse怎么切换SVN的用户

    在用eclipse的时候会经常用到SVN来进行代码的版本控制,为了方便起见,我们会保存密码,从此之后就不会再出现输入或者修改用户名和密码的地方了,这时候想切换用户怎么办,在本地操作的一种方法是删除SV ...