Cassandra1.2文档学习(9)—— 数据写入
数据参考: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)—— 数据写入的更多相关文章
- Cassandra1.2文档学习解读计划——为自己鼓劲
最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...
- Cassandra1.2文档学习(8)—— 数据管理
数据参考:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_manage ...
- Cassandra1.2文档学习(13)—— 数据读取
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(11)—— 删除数据
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(6)—— 客户端数据请求
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(3)——数据分配和复制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(10)—— 插入和更新数据
参考数据:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(15)—— 配置数据一致性
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...
- Cassandra1.2文档学习(14)—— 事务和并发控制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
随机推荐
- 解决MVC Jquery"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题
在ASP.NET MVC项目中,使用AJAX向控制器发送GET请求获取JSON数据时,出现这个错误:"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站.若要允许 G ...
- Linux MySQL-Workbench安装
yum install pcre-devel libglade2-devel gtkmm24-devel libgnome-devel lua-devel libzip-devel mysql-dev ...
- Java Annotations: Explored & Explained--转载
原文地址:http://www.javacodegeeks.com/2012/08/java-annotations-explored-explained.html One of the many w ...
- 谈谈项目中遇到的各种iOS7适配问题
由于我的项目要适配到iOS7.1, 而现在已经是9时代了,在实际工作中我也是遇到了各种奇葩的坑,所以我想尽快把遇到的iOS7适配问题和解决方案分享出来,以后这些东西可能就用处不大了. 1.字体问题 i ...
- FIO工具常用参数
name 可能被用于覆盖作业的名称. filename fio 通常基于该作业名称,线程编号,构成一个文件名称和位置.如果您不想让线程之间的共享文件在一个作业或作业.指定文件名都以覆盖默认的. loc ...
- vim纯文本处理插件txtbrowser
纯文本处理插件:txtBrowser 插件作者:http://guoyoooping.blog.163.com/ Github地址:https://github.com/vim-scripts/Txt ...
- uiatuomator提示shortMsg=java.lang.RuntimeException
自动化要做断言,原本打算使用的testng,因为它断言后就能出结果,还能生成报告,但是在实践过程中,硬是没有成功,所以还是放弃,使用的junit,后面使用的cts框架生成的邮件,现在记录使用junit ...
- 浅谈用java解析xml文档(一)
关于xml本身的语法及使用的环境不多说了,网上有很多规则, 然对xml文档进行解析,一般分为四种解析方式,基于java官方文档的Dom 和Sax解析,还有就是基于 第三方jar包的 Jdom 和 Do ...
- css关于宽度
很多时候,我们指定了某个元素的宽度,浏览器渲染时却只给这个元素一半的宽度,这时可以试试min-width属性,该属性表示浏览器不能偷懒,资源再紧张也得分配min-width指定的宽度.
- HTTP层 —— 响应
1.创建响应 字符串&数组 所有路由和控制器都会返回一个被发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串,框架会将这 ...