Cassandra插入并更新性能差异

时间:2017-02-05 16:02:32

标签: cassandra

Cassandra在update和insert之间创建的行之间存在差异,它会影响ttl和行的行为,其中"所有空值"非键列。

除此行为外,在创建/删除/选择此行期间,这是否会对性能产生任何影响?

链接到JIRA描述此行为:

https://issues.apache.org/jira/browse/CASSANDRA-8430

1 个答案:

答案 0 :(得分:3)

<强> 1。 “执行计划”:执行相同的查询(按主键选择),source_elapsed列:

创建为插入内容:

2266,1768,1672,3302,3324,1422,1623,3833,3933,3519,4166。平均:2803

创建为更新:

1621,3498,4769,3680,3905,1781,4215,3764,3747,3460,1987。平均:3312

可能看起来Update有点慢,但这并不是真的一致,我相信执行次数越多,它们应该是相同的。

<强> 2。存储

行创建为插入:

[user1] @ 184 行[info = [ts = 1486368137507000 ttl = 3600,let = 1486371737]] :2017-01-01 14:00Z,bla ,5,2 | [blu = 77777 ts = 1486368137507000 ttl = 3600 ldt = 1486371737],[ble = 0 ts = 1486368137507000 ttl = 3600 ldt = 1486371737]

行创建为更新:

[user30] @ 122 行[info = [ts = -9223372036854775808]] :2017-01-01 14:00Z,bla,5,2 | [blu = 777 ts = 1486368139142000 ttl = 3600 ldt = 1486371739],[ble = 1 ts = 1486368139142000 ttl = 3600 ldt = 1486371739]

我认为sstabledump确实代表了保存在文件中的数据。这里唯一的区别是,作为insert创建的行是使用ttl生成的,并且在行级别上设置了列(并且ts设置为创建的时间) - 这是因为创建为插入并且可以选择具有所有空非关键列的行创建为更新时无法选择。因此,使用insert创建的行将使用多个字节的存储空间,这就完全不同了。

第3。墓碑:

创建为插入内容:

[user1] @ 48 Row [info = [ts = -9223372036854775808]]:2017-01-01 14:00Z,bla,5,2 | [blu = ts = 1486368407044000 ldt = 1486368406],[ble = ts = 1486368407044000 ldt = 1486368406]

创建为更新:

[user30] @ 0 Row [info = [ts = -9223372036854775808]]:2017-01-01 14:00Z,bla,5,2 | [blu = ts = 1486368403444000 ldt = 1486368403],[ble = ts = 1486368403444000 ldt = 1486368403]

正如所料,墓碑看起来完全相同。

<强>要点:

根据我的观察,两种类型的行创建之间的性能没有真正的区别。我很乐意在这里看到其他测试/观察/源代码评论。