Cassandra (バージョン 2) はどのタイプのトゥームストーンをサポートしていますか? この記事によると、それは(CQL用語で)サポートしています:
- 行の特定の列。
- 静的列。
- パーティション キーのすべての行。
他の種類の墓石を見逃していませんか? 特定の (CQL) 行を削除しますか? クラスタ キーなどの範囲の削除をサポートする特別なトゥームストーンはありますか? この情報は、トゥームストーンが多くなりすぎないようにスキーマを計画するときに知っておくと役立ちます。
Cassandra (バージョン 2) はどのタイプのトゥームストーンをサポートしていますか? この記事によると、それは(CQL用語で)サポートしています:
他の種類の墓石を見逃していませんか? 特定の (CQL) 行を削除しますか? クラスタ キーなどの範囲の削除をサポートする特別なトゥームストーンはありますか? この情報は、トゥームストーンが多くなりすぎないようにスキーマを計画するときに知っておくと役立ちます。
トゥームストーンは、削除を示す行に配置されるマーカーです。それらは、列または列の範囲内、または行全体のさまざまな場所に存在できます。以下の例は、通常のタイプのトゥームストーンを示しています (範囲タイプはここでは取り上げません)。
スキーマを計画するときは、1 つのテーブルではなく、実行しているクエリの種類に基づいてテーブルをモデル化します。多くのテーブルでデータが重複していることに気付く場合があります。テーブルは、着信読み取りと書き込みに対応するように最適化されています。以下のリンクは、Cassandra を使用したデータ モデリングに関する優れた背景情報を提供します。
http://www.datastax.com/resources/data-modeling
私の例: テーブルを作成し、いくつかのデータを挿入してnodetool flush
から、いくつかの sstables を生成するために使用しました。このsstable2json
ツールを使用すると、削除された行を確認できます。行全体の場合、単一の列とは少し異なって見えますが、本質的には単なるマーカーです。
すべてのデータを含むテーブルを次に示します。
$ ~/dse-4.5.1/resources/cassandra/bin/sstable2json ./dse-data/results/ts1/results-ts1-jb-1-Data.db
[
{"key": "3136","columns": [["","",1417814256390000], ["col2","26",1417814256390000], ["col3","36",1417814256390000], ["id","id16",1417814256390000]]},
{"key": "3133","columns": [["","",1417814218246000], ["col2","23",1417814218246000], ["col3","33",1417814218246000], ["id","id13",1417814218246000]]},
{"key": "3135","columns": [["","",1417814244766000], ["col2","25",1417814244766000], ["col3","35",1417814244766000], ["id","id15",1417814244766000]]},
{"key": "3134","columns": [["","",1417814230711000], ["col2","24",1417814230711000], ["col3","34",1417814230711000], ["id","id14",1417814230711000]]},
{"key": "3132","columns": [["","",1417814207910000], ["col2","22",1417814207910000], ["col3","32",1417814207910000], ["id","id12",1417814207910000]]},
{"key": "3131","columns": [["","",1417814197094000], ["col2","21",1417814197094000], ["col3","31",1417814197094000], ["id","id11",1417814197094000]]},
{"key": "31","columns": [["","",1417814185270000], ["col2","2",1417814185270000], ["col3","3",1417814185270000], ["id","id1",1417814185270000]]}
]
cqlsh での最初の削除は次のとおりです。
cqlsh:results> delete from ts1 WHERE col1 = '1';
cqlsh:results> delete id from ts1 WHERE col1 = '11';
フラッシュ後の結果の sstable は次のとおりです。
[datastax@DSE3 ~]$ ~/dse-4.5.1/resources/cassandra/bin/sstable2json ./dse-data/results/ts1/results-ts1-jb-2-Data.db
[
{"key": "3131","columns": [["id","54822130",1417814320400000,"d"]]},
{"key": "31","metadata": {"deletionInfo": {"markedForDeleteAt":1417814302304000,"localDeletionTime":1417814302}},"columns": []}
]
cqlsh での次の削除は次のとおりです。
cqlsh:results> delete col2 from ts1 WHERE col1 = '12';
フラッシュ後の結果の sstable は次のとおりです。
[datastax@DSE3 ~]$ ~/dse-4.5.1/resources/cassandra/bin/sstable2json ./dse-data/results/ts1/results-ts1-jb-3-Data.db
[
{"key": "3132","columns": [["col2","5482220b",1417814539434000,"d"]]}
]
d
圧縮が発生すると、これらのすべての sstable が 1 つの単一の sstable に結合され、削除された行はすべてそこに残りますが、削除のマークが付けられます。圧縮の実行後にこれを再度確認できます (タイムスタンプ付きのフラグを探します)。
[datastax@DSE3 ~]$ ./dse-4.5.1/bin/nodetool compact
[datastax@DSE3 ~]$ ~/dse-4.5.1/resources/cassandra/bin/sstable2json ./dse-data/results/ts1/results-ts1-jb-4-Data.db
[
{"key": "3136","columns": [["","",1417814256390000], ["col2","26",1417814256390000], ["col3","36",1417814256390000], ["id","id16",1417814256390000]]},
{"key": "3133","columns": [["","",1417814218246000], ["col2","23",1417814218246000], ["col3","33",1417814218246000], ["id","id13",1417814218246000]]},
{"key": "3135","columns": [["","",1417814244766000], ["col2","25",1417814244766000], ["col3","35",1417814244766000], ["id","id15",1417814244766000]]},
{"key": "3134","columns": [["","",1417814230711000], ["col2","24",1417814230711000], ["col3","34",1417814230711000], ["id","id14",1417814230711000]]},
{"key": "3132","columns": [["","",1417814207910000], ["col2","5482220b",1417814539434000,"d"], ["col3","32",1417814207910000], ["id","id12",1417814207910000]]},
{"key": "3131","columns": [["","",1417814197094000], ["col2","21",1417814197094000], ["col3","31",1417814197094000], ["id","54822130",1417814320400000,"d"]]},
{"key": "31","metadata": {"deletionInfo": {"markedForDeleteAt":1417814302304000,"localDeletionTime":1417814302}},"columns": []}
]
このテーブルは、到達するまでこのままgc_grace_seconds
になり、次の圧縮で行が実際に消えます。削除してgc_grace_seconds
から圧縮を実行するのを見てください。
cqlsh> ALTER TABLE results.ts1 WITH gc_grace_seconds=500;
cqlsh> exit
[datastax@DSE3 ~]$ ./dse-4.5.1/bin/nodetool compact results;
[datastax@DSE3 ~]$ ./dse-4.5.1/resources/cassandra/bin/sstable2json ./dse-data/results/ts1/results-ts1-jb-5-Data.db
[
{"key": "3136","columns": [["","",1417814256390000], ["col2","26",1417814256390000], ["col3","36",1417814256390000], ["id","id16",1417814256390000]]},
{"key": "3133","columns": [["","",1417814218246000], ["col2","23",1417814218246000], ["col3","33",1417814218246000], ["id","id13",1417814218246000]]},
{"key": "3135","columns": [["","",1417814244766000], ["col2","25",1417814244766000], ["col3","35",1417814244766000], ["id","id15",1417814244766000]]},
{"key": "3134","columns": [["","",1417814230711000], ["col2","24",1417814230711000], ["col3","34",1417814230711000], ["id","id14",1417814230711000]]},
{"key": "3132","columns": [["","",1417814207910000], ["col3","32",1417814207910000], ["id","id12",1417814207910000]]},
{"key": "3131","columns": [["","",1417814197094000], ["col2","21",1417814197094000], ["col3","31",1417814197094000]]}
]
31
key の行がどのように移動したか、およびkey のあるcol1
行3132
とid
keyのある行に注目してください。3131
明確にするための私のテーブルスキーマ:
cqlsh:results> DESCRIBE TABLE ts1 ;
CREATE TABLE ts1 (
col1 text,
col2 text,
col3 text,
id text,
PRIMARY KEY ((col1))
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.000000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
脚注として、sstable2json
出力のトゥームストーン マーカーは次のとおりです。
e
- 期限切れの TTL
d
- 削除された値 (トゥームストーン)
t
- 削除された値の範囲 (範囲の墓石)
@markcの答えに加えて、コレクションを使用するたびに表示される列範囲の墓石もあります。「tags」というset<text>
列があり、行を挿入するたびに、これらのいずれかを取得します (この場合のように単に null に設定している場合でも):
["1381316637599609:45787829:tags:_","1381316637599609:45787829:tags:!",1438264650252000,"t",1438264650],
「t」は墓石の略だと思います。 このブログ投稿では、この種の墓石の別の例について詳しく説明しています。