Cassandra Issue with Tombstone
1. Cassandra is quicker than postgre and have lower change to lose data. Cassandra doesn't have foreign keys, locking mechanism and etcs, so that it's quicker on writes.
2. Everything in cassandra is a write. Insert/update/delete is also write.
3. Setting a column to null/ deleting a column will create a tomestone; Deleting a row/primary key/partitio will create a single row tomestone
4. Could adjust tombstone_warn_threshold and tombstone_failure_threshold in cassandra.yaml.
5. Could adjust gc_grace_seconds when creating table
6. Hitting tombstone limit only happens per query.
Related Attributes
Delete will create tombstones
tombstone_warn_threshold: 1000 (default), could be found in cassandra.yaml
tombstone_failure_threshold: 100000 (default), could be found in cassandra.yaml
tombstone_compaction_interval: table attribute
min_compaction_threshold: table attribute #Compaction will only be eligible after min_compaction_threshold SSTables exist, by default it’s 4.
gc_grace_seconds: table attribute
snapshot_before_compaction: false
Check table attributes here http://docs.datastax.com/en/cassandra/2.1/cassandra/reference/referenceTableAttributes.html
Could consider using DateTieredCompactionStrategy instead of the default SizeTieredCompactionStrategy.
Cassandra MBean
Use Jconsole to remotely connect to:
hostname:7199
e.g. localhost:7199
Check/change the TombstoneFailureThreshold attribute inside StorageService MBean.
Force a flush and compaction
sudo nodetool -h localhost -p 7199 -u OC_APP_RAINBOWDBA -pw a3c224d4b89192d2ea3ea943dd7e9648 flush rainbowdba undeliveredmessage
sudo nodetool -h localhost -p 7199 -u OC_APP_RAINBOWDBA -pw a3c224d4b89192d2ea3ea943dd7e9648 compact rainbowdba undeliveredmessage
Deleted rows will only disappear when gc_grace_seconds time passed and a flush and compaction has been forced
Truncating Table
Truncating a table is an immediate operation and won’t leave any tomestones.
Don’t insert Null into columns
Inserting a null value to the column will leave a cell tomestone. Deleting a partition/row will also create a single row tombstone.
Deleting a partition will create a partition tomestone and override the existing cell tomestones. This only happens in memory table not on the disk. Not sure whether creating a partition tomestone will cause a compaction of the cell tomestones on disk.
Using TTL
insert into undeliveredmessage("id", "message","type") values('1','message','RAVEN') using ttl 5;
This query will result in 3 tomestone cells and one row tombstone.
Cassandra partition size limitation
In Cassandra, the maximum number of cells (rows x columns) in a single partition is 2 billion.
Additionally, a single column value may not be larger than 2GB. Partitions greater than 100Mb can cause significant pressure on the heap.
Performance Test
Test script TestCassandraPerformance.java could be found in
Cassandra version: 2.2.3, cqlsh 5.0.1
1. TombstoneFailureThreshold = 500
Seems persist 102000 rows and then delete them won’t hit the limit of the tomestone.
2. TombstoneFailureThreshold = 1
insert into undeliveredmessage("id","message","sent","type") values('3', 'message3', True, null);
and then select * from undeliveredmessage is fine
2. TombstoneFailureThreshold = 1
insert into undeliveredmessage("id","message","sent","type") values('3', 'message3', null, null);
and then select * from undeliveredmessage will hit the tomestone limit
|
deleted rows number |
existing rows number |
locally recovery time |
vector 2 recovery time |
|
150_000 * 9 |
Operation Timed Out |
Operation Timed Out |
|
|
150_000 * 5 |
9_072 ms |
10_152 ms |
|
|
150_000 * 3 |
5_679 ms |
7_957 ms |
|
|
150_000 * 2 |
3_025 ms |
5_218 ms |
|
|
150_000 |
1_326 ms |
1_879 ms |
|
|
150_000 |
158 ms |
333 ms |
|
|
150_000 *2 |
562 ms |
1_963 ms |
|
|
150_000 *3 |
2_223 ms |
3_833 ms |
|
|
150_000 *5 |
3_476 ms |
9_726 ms |
|
|
150_000 *10 |
Operation Timed Out |
Operation Timed Out |
|
|
150_000 |
150_000 |
1_321 ms |
3_735 ms |
|
150_000 *2 |
150_000 |
1_893 ms |
4_939 ms |
Note that we will hit timeout issue when having 150_000 *10 deleted rows in the table.
Hitting tombstone limit
For Dash you should see
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ONE (1 responses were required but only 0 replica responded)))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:223)
For query in command line, you should see something like:
Traceback (most recent call last):
File "/usr/bin/cqlsh.py", line 1172, in perform_simple_statement
rows = future.result(self.session.default_timeout)
File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 3347, in result
raise self._final_exception
ReadFailure: code=1300 [Replica(s) failed to execute read] message="Operation failed - received 0 responses and 1 failures" info={'failures': 1, 'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
Cassandra Issue with Tombstone的更多相关文章
- Cassandra issue - "The clustering keys ordering is wrong for @EmbeddedId"
在Java连接Cassandra的情况下, 当使用组合主键时, 默认第一个是Partition Key, 后续的均为Clustering Key. 如果有多个Clustering Key, 在Java ...
- akka-typed(10) - event-sourcing, CQRS实战
在前面的的讨论里已经介绍了CQRS读写分离模式的一些原理和在akka-typed应用中的实现方式.通过一段时间akka-typed的具体使用对一些经典akka应用的迁移升级,感觉最深的是EvenSou ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- Cassandra 计数器counter类型和它的限制
文档基础 Cassandra 2.* CQL3.1 翻译多数来自这个文档 更新于2015年9月7日,最后有参考资料 作为Cassandra的一种类型之一,Counter类型算是限制最多的一个.Coun ...
- 闲聊cassandra
原创,转载请注明出处 今天聊聊cassandra,里面用了不少分布式系统设计的经典算法比如consistent hashing, bloom filter, merkle tree, sstable, ...
- 开源软件:NoSql数据库 - 图数据库 Cassandra
转载原文:http://www.cnblogs.com/loveis715/p/5299495.html Cassandra简介 在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了 ...
- Cassandra User 问题汇总(1)------------repair
Cassandra Repair 问题 问1: 文档建议每周或者每月跑一次full repair.那么如果我是使用partition rangerepair,是否还有必要在cluster的每个节点上定 ...
- 从Stage角度看cassandra write
声明 文章发布于CSDN cassandra concurrent 具体实现 cassandra并发技术文中介绍了java的concurrent实现,这里介绍cassandra如何基于java实现ca ...
- Cassandra 原理介绍
Cassandra最初源自Facebook,结合了Google BigTable面向列的特性和[Amazon Dynamo](http://en.wikipedia.org/wiki/Dynamo(s ...
随机推荐
- mysql 4 索引的优缺点
为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因. 第 ...
- Android使用Path实现仿最新淘宝轮播广告底部弧形有锯齿的问题以及解决办法
在前面一篇博文<Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程>中已经基本介绍了实现轮播广告的基本思路和过程,但是仔细观察淘宝的轮播广告栏,发现在轮播广告栏的底部有个小小的 ...
- WebGL 高级技术
1.如何实现雾化 实现雾化的方式由多种,这里使用最简单的一种:线性雾化(linear fog).在线性雾化中,某一点的雾化程度取决于它与视点之间的距离,距离越远雾化程度越高.线性雾化有起点和终点,起点 ...
- jquery 中 eq()遍历方法 和:eq()选择器的区别
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- CSharpGL(41)改进获取字形贴图的方法
CSharpGL(41)改进获取字形贴图的方法 在(http://www.cnblogs.com/bitzhuwei/p/CSharpGL-28-simplest-way-to-creating-fo ...
- 51单片机I/O口直接输入输出实例(附调试及分析过程)
51单片机P0/P1/P2/P3口的区别: P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据: P1口只能 ...
- 读书笔记 effective c++ Item 50 了解何时替换new和delete 是有意义的
1. 自定义new和delete的三个常见原因 我们先回顾一下基本原理.为什么人们一开始就想去替换编译器提供的operator new和operator delete版本?有三个最常见的原因: 为了检 ...
- java复习(5)---接口、继承、多态
Java作为完全面向对象语言,接口.继承和多态是三个非常重要的概念. 1.继承. (1)关键字: extends (2)子类用super()调用父类构造函数,用super().方法 调用父类的成员方法 ...
- c的旅程---字符
输出菱形实验: /***************** 2017年四月十六. 第一个例子,输出菱形.就是找关系. 这是当n= 3时, * *** * ******************/ #inclu ...
- Block Token 原理分析
介绍 文件权限检查由NameNode执行,而不是DataNode执行. 默认情况下,任何客户端都可以访问只有其块ID的任何块. 为了解决这个问题,Hadoop引入了块访问令牌的概念. 块访问令牌由Na ...