Cassandra学习笔记之数据更新
2014-03-29 18:27
148 查看
写入流程
cassandra先把数据写入commitlog中,然后把数据写入内存Memtable中,当以下条件之一满足时,Memtable会被写入SStable中1、达到memtable_throughput_in_mb上限
2、达到memtable_operations_in_millions上限
3、超过上一次写入的时间间隔memtable_flush_after_mins
如果写入的ColumnFamily上有二级索引,还需要更新二级索引(commitlog和Memtable都要更新)
关于数据合并
Memtable中的数据是按row key进行排序的,在cassandra中不允许有相同的row key,如下3次写入:write (k1, c1:v1) write (k2, c1:v1 C2:v2) write (k1, c1:v4 c3:v3 c2:v2)Commitlog存储:
k1, c1:v1 k2, c1:v1 C2:v2 k1, c1:v4 c3:v3 c2:v2Memtable和SSTable中是这样存储的:
k1 c1:v4 c2:v2 c3:v3 k2 c1:v1 c2:v2
插入重复键的行,被视为一个更新操作,这个更新操作可能会被写入新的SSTable文件中。
关于删除操作
与传统关系数据库不同,在Cassandra中不会立即从磁盘中删除已删除的数据(事实上由于SSTable是文件,是不可变的,没法立即删除),而是采用一种称为墓碑的概念,对于需要删除列,向文件中写入一个墓碑标记。此时如果不运行定期修复,可删除的列还可以重复出现。如果一个节点下线了,可能没有接收到墓碑标记,为了防止这种数据再次出现,管理员应该运行一个节点修复任务。
gc_grace_seconds参数配置墓碑上标记的数据在删除之前可以保留的时间,默认为10天。
写时提示移交
在配有副本机制的集群中,根据写时一致性策略,需要写入多个副本,如果其中一个副本宕机或者下线,需要保留现场,待宕机结点恢复上线时进行重放。需要保留如下信息:(1)宕机副本的位置
(2)需要重放的row key
(3)写入的数据
如果协调节点不能重放,会抛出TimedOutException异常。如果节点长时间不能恢复,可能是一个故障,这时应该进行修复。
相关文章推荐
- 添加数据时,内存数据不能更新
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- mysql 更新数据表的记录
- 【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于CSDN博客定期更新排名)
- Oracle两表之间数据更新
- SQL通过Datatable更新数据库表内容
- FME规划数据GIS更新入库
- fragment更新数据后使用notifyDataSetChanged()无效
- Mysql 插入、更新与删除数据
- 【SQL Server】数据更新
- SQL server中将一个表中一列数据更新到另一个表中
- arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新
- sql server 数据库复制实现数据同步常见问题(不定期更新)
- 动态更新highcharts数据的实现方法
- asp.net gridview 无法更新数据
- android listview 执行notifyDataSetChanged 不更新数据的原因
- Vue2 全局-Vue.set更新vue数据
- 在ASP.NET 2.0中操作数据之十六:概述插入、更新和删除数据
- 还是尽量不要使用带表头的内表的好,更新数据有麻烦
- echarts 数据自动更新问题