CassandraのComplexColumn tombstonesについて
ComplexColumn tombstoneは、セット、リスト、マップなどのコレクション型の列を新規設置(ないし再設置)するときに生成 .... 削除の処理でなくて、新規設置のときに生成されるので、知らないとちょっと吃驚する。( ただし、frozenで定義する場合は生成されない )
コレクション型のtombstone生成有無整理
ComplexColumn tombstoneの生成を踏まえて、コレクション型の列(set、list、mapなど)を更新するときのtombstone生成有無を整理
(tombstone生成 - リスト型の例) v1がリスト型の列
||CQL例|非frozenの場合|frozenの場合 |
|---|---|---|---|---|
|① 新規設置|insert into test_list ( pkey1, v1 ) values ( 1, [ 'tama', 'kuro', 'shiro' ] );|生成あり|生成しない|
|② 非増分更新(設置し直し)|update test_list set v1 = [ 'hachi', 'goro' ] where pkey1 = 1;|生成あり|生成しない|
|③ 更新(先頭への追加)|update test_list set v1 = [ 'ron' ] + v1 where pkey1 = 1;|生成しない|(操作不可)|
|④ 更新(末尾への追加)|update test_list set v1 = v1 + [ 'tabi' ] where pkey1 = 1;|生成しない|(操作不可)|
|⑤ 更新(特定位置)|update test_list set v1[2] = 'yume' where pkey1 = 1; |生成しない|(操作不可)|
|⑥ 更新(特定値を持つ要素の削除)|update test_list set v1 = v1 - [ 'hachi' ] where pkey1 = 1; |生成あり|(操作不可)|
|⑦ 削除|delete v1 from test_list where pkey1 = 1; |生成あり|生成あり|
① 新規設置
( 非frozenの場合 )
新規設置でdeletion_infoがもれなく生成
cqlsh:sitest01> desc test_list;
CREATE TABLE sitest01.test_list (
pkey1 int PRIMARY KEY,
v1 list<text>
) WITH bloom_filter_fp_chance = 0.01
:
(略)
:
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+----
cqlsh:sitest01> insert into test_list ( pkey1, v1 ) values ( 1, [ 'tama', 'kuro', 'shiro' ] );
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+---------------------------
1 | ['tama', 'kuro', 'shiro']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 95,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-14T23:38:38.292656Z", "local_delete_time" : "2019-12-14T23:38:38Z" } },
{ "name" : "v1", "path" : [ "da4d0852-1eca-11ea-bdbd-218e650a2913" ], "value" : "tama" },
{ "name" : "v1", "path" : [ "da4d0853-1eca-11ea-bdbd-218e650a2913" ], "value" : "kuro" },
{ "name" : "v1", "path" : [ "da4d0854-1eca-11ea-bdbd-218e650a2913" ], "value" : "shiro" }
]
}
]
}
]
sstablemetadataから情報抽出
Estimated droppable tombstones: 0.3333333333333333
Estimated tombstone drop times:
1576366740: 1
Count Row Size Cell Count
3 0 1
103 1 0
①’ 新規設置 ( frozenの場合 )
deletion_infoは生成されない
cqlsh:sitest01> desc test_list2;
CREATE TABLE sitest01.test_list2 (
pkey1 int PRIMARY KEY,
v1 frozen<list<text>>
) WITH bloom_filter_fp_chance = 0.01
:
(略)
:
cqlsh:sitest01> select * from test_list2;
pkey1 | v1
-------+----
cqlsh:sitest01> insert into test_list2 ( pkey1, v1 ) values ( 1, [ 'tama', 'kuro', 'shiro' ] );
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+---------------------------
1 | ['tama', 'kuro', 'shiro']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 53,
"liveness_info" : { "tstamp" : "2019-12-08T10:15:09.501821Z" },
"cells" : [
{ "name" : "v1", "value" : ["tama", "kuro", "shiro"] }
]
}
]
}
]
② 非増分更新(設置し直し)
( 非frozenの場合 )
再設置でdeletion_infoがもれなく生成
cqlsh:sitest01> update test_list set v1 = [ 'hachi', 'goro' ] where pkey1 = 1;
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+-------------------
1 | ['hachi', 'goro']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 87,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-14T23:43:16.394982Z", "local_delete_time" : "2019-12-14T23:43:16Z" } },
{ "name" : "v1", "path" : [ "80102ec1-1ecb-11ea-bdbd-218e650a2913" ], "value" : "hachi", "tstamp" : "2019-12-14T23:43:16.394983Z" },
{ "name" : "v1", "path" : [ "80102ec2-1ecb-11ea-bdbd-218e650a2913" ], "value" : "goro", "tstamp" : "2019-12-14T23:43:16.394983Z" }
]
}
]
}
]
sstablemetadataから情報抽出
Estimated droppable tombstones: 0.5
Estimated tombstone drop times:
1576367040: 1
Count Row Size Cell Count
2 0 1
103 1 0
②’ 新規設置(設置し直し) ( frozenの場合 )
deletion_infoは生成されない
cqlsh:sitest01> update test_list2 set v1 = [ 'hachi', 'goro' ] where pkey1 = 1;
cqlsh:sitest01> select * from test_list2;
pkey1 | v1
-------+-------------------
1 | ['hachi', 'goro']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 30,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-15T00:01:29.673453Z", "local_delete_time" : "2019-12-15T00:01:29Z" } }
]
}
]
}
]
③ 更新(先頭への追加)
( 非frozenの場合 )
新たなdeletion_info生成はない
cqlsh:sitest01> update test_list set v1 = [ 'ron' ] + v1 where pkey1 = 1;
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+-------------------------
1 | ['ron', 'hachi', 'goro']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 113,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-14T23:43:16.394982Z", "local_delete_time" : "2019-12-14T23:43:16Z" } },
{ "name" : "v1", "path" : [ "f5b7a27f-ce04-11d3-bdbd-218e650a2913" ], "value" : "ron", "tstamp" : "2019-12-14T23:48:37.848331Z" },
{ "name" : "v1", "path" : [ "80102ec1-1ecb-11ea-bdbd-218e650a2913" ], "value" : "hachi", "tstamp" : "2019-12-14T23:43:16.394983Z" },
{ "name" : "v1", "path" : [ "80102ec2-1ecb-11ea-bdbd-218e650a2913" ], "value" : "goro", "tstamp" : "2019-12-14T23:43:16.394983Z" }
]
}
]
}
]
sstablemetadataから情報抽出
Estimated droppable tombstones: 0.3333333333333333
Estimated tombstone drop times:
1576367040: 1
Count Row Size Cell Count
3 0 1
124 1 0
③’ 更新(先頭への追加) ( frozenの場合 )
cqlsh:sitest01> update test_list2 set v1 = [ 'ron' ] + v1 where pkey1 = 1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid operation (v1 = ['ron'] - v1) for frozen list column v1"
④ 更新(末尾への追加)
( 非frozenの場合 )
新たなdeletion_info生成はない
cqlsh:sitest01> update test_list set v1 = v1 + [ 'tabi' ] where pkey1 = 1;
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+----------------------------------
1 | ['ron', 'hachi', 'goro', 'tabi']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 141,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-14T23:43:16.394982Z", "local_delete_time" : "2019-12-14T23:43:16Z" } },
{ "name" : "v1", "path" : [ "f5b7a27f-ce04-11d3-bdbd-218e650a2913" ], "value" : "ron", "tstamp" : "2019-12-14T23:48:37.848331Z" },
{ "name" : "v1", "path" : [ "80102ec1-1ecb-11ea-bdbd-218e650a2913" ], "value" : "hachi", "tstamp" : "2019-12-14T23:43:16.394983Z" },
{ "name" : "v1", "path" : [ "80102ec2-1ecb-11ea-bdbd-218e650a2913" ], "value" : "goro", "tstamp" : "2019-12-14T23:43:16.394983Z" },
{ "name" : "v1", "path" : [ "9d573042-1ecc-11ea-bdbd-218e650a2913" ], "value" : "tabi", "tstamp" : "2019-12-14T23:51:15.011726Z" }
]
}
]
}
]
sstablemetadataから情報抽出
Estimated droppable tombstones: 0.25
Estimated tombstone drop times:
1576367040: 1
Count Row Size Cell Count
4 0 1
149 1 0
④' 更新(末尾への追加)( frozenの場合 )
cqlsh:sitest01> update test_list2 set v1 = v1 + [ 'tabi' ] where pkey1 = 1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid operation (v1 = v1 + ['tabi']) for frozen collection column v1"
⑤ 更新(特定位置)
( 非frozenの場合 )
新たなdeletion_info生成はない
cqlsh:sitest01> update test_list set v1[2] = 'yume' where pkey1 = 1;
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+----------------------------------
1 | ['ron', 'hachi', 'yume', 'tabi']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 141,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-14T23:43:16.394982Z", "local_delete_time" : "2019-12-14T23:43:16Z" } },
{ "name" : "v1", "path" : [ "f5b7a27f-ce04-11d3-bdbd-218e650a2913" ], "value" : "ron", "tstamp" : "2019-12-14T23:48:37.848331Z" },
{ "name" : "v1", "path" : [ "80102ec1-1ecb-11ea-bdbd-218e650a2913" ], "value" : "hachi", "tstamp" : "2019-12-14T23:43:16.394983Z" },
{ "name" : "v1", "path" : [ "80102ec2-1ecb-11ea-bdbd-218e650a2913" ], "value" : "yume", "tstamp" : "2019-12-14T23:55:20.864790Z" },
{ "name" : "v1", "path" : [ "9d573042-1ecc-11ea-bdbd-218e650a2913" ], "value" : "tabi", "tstamp" : "2019-12-14T23:51:15.011726Z" }
]
}
]
}
]
sstablemetadataから情報抽出
Estimated droppable tombstones: 0.25
Estimated tombstone drop times:
1576367040: 1
Count Row Size Cell Count
4 0 1
149 1 0
⑤' 更新(特定位置) ( frozenの場合 )
cqlsh:sitest01> update test_list2 set v1[2] = 'yume' where pkey1 = 1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid operation (v1[2] = 'yume') for frozen collection column v1"
⑥ 更新(特定値を持つ要素の削除)
( 非frozenの場合 )
この場合は当該要素にdeleteion_info付与
cqlsh:sitest01> update test_list set v1 = v1 - [ 'hachi' ] where pkey1 = 1;
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+-------------------------
1 | ['ron', 'yume', 'tabi']
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 137,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-14T23:43:16.394982Z", "local_delete_time" : "2019-12-14T23:43:16Z" } },
{ "name" : "v1", "path" : [ "f5b7a27f-ce04-11d3-bdbd-218e650a2913" ], "value" : "ron", "tstamp" : "2019-12-14T23:48:37.848331Z" },
{ "name" : "v1", "path" : [ "80102ec1-1ecb-11ea-bdbd-218e650a2913" ], "deletion_info" : { "local_delete_time" : "2019-12-14T23:58:24Z" },
"tstamp" : "2019-12-14T23:58:24.564980Z"
},
{ "name" : "v1", "path" : [ "80102ec2-1ecb-11ea-bdbd-218e650a2913" ], "value" : "yume", "tstamp" : "2019-12-14T23:55:20.864790Z" },
{ "name" : "v1", "path" : [ "9d573042-1ecc-11ea-bdbd-218e650a2913" ], "value" : "tabi", "tstamp" : "2019-12-14T23:51:15.011726Z" }
]
}
]
}
][root@cs7ds4001 test_list-b1ad8eb21eca11eabdbd218e650a2913]#
sstablemetadataから情報抽出
Estimated droppable tombstones: 0.5
Estimated tombstone drop times:
1576367040: 1
1576367940: 1
Count Row Size Cell Count
4 0 1
149 1 0
⑥' 更新(特定値を持つ要素の削除) ( frozenの場合 )
cqlsh:sitest01> update test_list2 set v1 = v1 - [ 'hachi' ] where pkey1 = 1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid operation (v1 = v1 - ['hachi']) for frozen collection column v1"
⑦ 削除
( 非frozenの場合 )
cqlsh:sitest01> delete v1 from test_list where pkey1 = 1 ;
cqlsh:sitest01> select * from test_list;
pkey1 | v1
-------+------
1 | null
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 30,
"liveness_info" : { "tstamp" : "2019-12-14T23:38:38.292657Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "marked_deleted" : "2019-12-15T00:01:29.673453Z", "local_delete_time" : "2019-12-15T00:01:29Z" } }
]
}
]
}
]
sstablemetadataから情報抽出
Estimated droppable tombstones: 1.0
Estimated tombstone drop times:
1576368120: 1
Count Row Size Cell Count
1 0 1
35 1 0
⑦' 削除 ( frozenの場合 )
cqlsh:sitest01> delete v1 from test_list2 where pkey1 = 1 ;
cqlsh:sitest01> select * from test_list2;
pkey1 | v1
-------+------
1 | null
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 29,
"liveness_info" : { "tstamp" : "2019-12-08T10:15:09.501821Z" },
"cells" : [
{ "name" : "v1", "deletion_info" : { "local_delete_time" : "2019-12-08T10:24:48Z" },
"tstamp" : "2019-12-08T10:24:48.458508Z"
}
]
}
]
}
]