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的更多相关文章

  1. Cassandra issue - "The clustering keys ordering is wrong for @EmbeddedId"

    在Java连接Cassandra的情况下, 当使用组合主键时, 默认第一个是Partition Key, 后续的均为Clustering Key. 如果有多个Clustering Key, 在Java ...

  2. akka-typed(10) - event-sourcing, CQRS实战

    在前面的的讨论里已经介绍了CQRS读写分离模式的一些原理和在akka-typed应用中的实现方式.通过一段时间akka-typed的具体使用对一些经典akka应用的迁移升级,感觉最深的是EvenSou ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. Cassandra 计数器counter类型和它的限制

    文档基础 Cassandra 2.* CQL3.1 翻译多数来自这个文档 更新于2015年9月7日,最后有参考资料 作为Cassandra的一种类型之一,Counter类型算是限制最多的一个.Coun ...

  5. 闲聊cassandra

    原创,转载请注明出处 今天聊聊cassandra,里面用了不少分布式系统设计的经典算法比如consistent hashing, bloom filter, merkle tree, sstable, ...

  6. 开源软件:NoSql数据库 - 图数据库 Cassandra

    转载原文:http://www.cnblogs.com/loveis715/p/5299495.html Cassandra简介 在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了 ...

  7. Cassandra User 问题汇总(1)------------repair

    Cassandra Repair 问题 问1: 文档建议每周或者每月跑一次full repair.那么如果我是使用partition rangerepair,是否还有必要在cluster的每个节点上定 ...

  8. 从Stage角度看cassandra write

    声明 文章发布于CSDN cassandra concurrent 具体实现 cassandra并发技术文中介绍了java的concurrent实现,这里介绍cassandra如何基于java实现ca ...

  9. Cassandra 原理介绍

    Cassandra最初源自Facebook,结合了Google BigTable面向列的特性和[Amazon Dynamo](http://en.wikipedia.org/wiki/Dynamo(s ...

随机推荐

  1. 我是如何处理大并发量订单处理的 KafKa部署总结

    今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache 与很多有名的中间件搭配起来用效果更好哦 ,为什么不用RabbitMQ,因为公司需要它. 网上已经有很多怎么用和用到哪的 ...

  2. 一个web应用的诞生(10)--关注好友

    下面回到首页中,使用一个账户登录,你肯定已经注意到了这里的内容: 没错,现在都是写死的一些固定信息,其中分享数量很容易就可以获取,只需要修改首页模板: <p class="text-m ...

  3. 现代3D图形编程学习-设置三角形颜色(译)

    本书系列 现代3D图形变成学习 http://www.cnblogs.com/grass-and-moon/category/920962.html 设置颜色 这一章会对上一章中绘制的三角形进行颜色的 ...

  4. 细说OC中的load和initialize方法

    OC中有两个特殊的类方法,分别是load和initialize.本文总结一下这两个方法的区别于联系.使用场景和注意事项.Demo可以在我的Github上找到--load和initialize,如果觉得 ...

  5. app专项测试自动化测试方法思路与实现

    秉着个人意愿打算把python+rf接口自动进行彻底结束再做些其它方面的输出~但事与愿违,但领导目前注重先把专项测试方面完成,借此,先暂停python+rf(主要是与Jenkins集成+导入DB+微信 ...

  6. 用MPLAB IDE编程时,软件总是弹出一个窗口提示: “the extended cpu mode configuration bit is enabled,but the program that was loaded was not built using extended cpu instructions. therefore,your code may not work properly

    用MPLAB IDE编程时,软件总是弹出一个窗口提示:"the extended cpu mode configuration bit is enabled,but the program ...

  7. Mybatis(一) mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  8. gulp基于seaJs模块化项目打包实践【原创】

    公司还一直在延续使用jq+seajs的技术栈,所以只能基于现在的技术栈进行静态文件打包,而众所周知seajs的打包比较"偏门",在查了不少的文档和技术分享后终于琢磨出了自己的打包策 ...

  9. Java 中字两个字符串判断是否相等(转载)

    java中判断字符串是否相等有两种方法:1.用"=="运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b=&q ...

  10. 【转】JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理

    转自:http://www.cnblogs.com/ysw-go/ 获取数据库自动生成的主键 我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. ...