Cassandra Insert 和 Update 的性能差异

nev*_*vsv 1 cassandra

由更新和插入创建的行在 Cassandra 中存在差异,它会影响 ttl 和具有“全空”非键列的行的行为。

除了这种行为,这对创建/删除/选择此类行期间的性能有任何影响吗?

链接到描述此行为的 JIRA:

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

nev*_*vsv 7

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

也许看起来更新有点慢,但这并不是真正一致的,我相信执行次数越多,它们应该是相同的。

2. 存储:

创建为插入的行:

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

行创建为更新:

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

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

3.墓碑:

创建为插入:

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

创建为更新:

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

正如预期的那样,两个创建的墓碑看起来完全相同。

概括:

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