40000MBを書き込むと、まとめ直しを含めて実際には171840MBを書きます。4.30倍です。
まとめる広がりを4倍にすると6.14倍まで増えました。設定1つで1.4倍違います。
1台に置く前提がありません。だから鍵の設計と、書き込みの重ね方が中心の話になります。
Cassandraの位置づけは、公式の1文にまとまっています。Apache Cassandraは、公開された作りの、配って置く形のデータベースであるという記述です。
配って置く以上、どこに置くかを決める仕組みが要ります。それが鍵です。
1番目と2番目が、この記事で数える対象です。どちらも設計や設定で大きく変わります。
3番目は、鍵から置き場所が決まる仕組みに共通します。読み方を先に決めてから鍵を決めることになります。
同じ制約はDynamoDBの記事でも扱いました。あとから条件を足して探す形は取れません。
Apache Cassandra is an open-source, distributed NoSQL database.原文Apache Cassandra 公式ドキュメント「Overview」 この内容の有効期限2027-02-18
鍵から節が決まるので、同じ鍵は同じ節に行きます。鍵そのものの偏りは分けても消えません。
Cassandraで置き場所を決めるのは、主鍵の必須の部分です。公式は分割:Cassandraのすべての行が持たなければならない主鍵の必須の部分を定める。まとまりの中のどの節にその行が置かれるかを識別するためのものであると説明しています。
節が増えれば均されるのか。実際に振り分けて数えました。
鍵 50,000種・引く回数 500,000回 鍵を混ぜて置き場所を決める。置き場所の数を変えて、いちばん多い置き場所の割合を見る 置き場所の数 均等なら よく引かれる鍵がある場合 均される場合 最大と均等の比 8個 12.50% 15.98% 12.60% 1.3倍 32個 3.13% 7.46% 3.18% 2.4倍 128個 0.78% 5.52% 0.82% 7.1倍 512個 0.20% 5.10% 0.22% 26.1倍
512個に分けても、いちばん多い場所は5.10%です。均等の0.20%とは26.1倍の開きがあります。
右から2列目は、引かれ方が均される場合です。こちらはほぼ均等に収まっています。
Cassandraでは、同じ鍵の行が1つのまとまりとして置かれます。その鍵に行が集まりすぎると、そのまとまりだけが大きくなります。
この計測の5.10%は引かれる回数の話ですが、置く量にも同じ偏りが出ます。
対策も同じです。鍵に接尾辞を足して分けるか、日付などを鍵の一部に入れて区切ります。
分けるほど、均等との比は広がっていく。
Partition: Defines the mandatory part of the primary key all rows in Cassandra must have to identify the node in a cluster where the row is stored.原文Apache Cassandra 公式ドキュメント「Overview」 この内容の有効期限2027-02-18
書き換えないので、追記してあとでまとめ直します。その分だけ書く量が増えます。
Cassandraが置くファイルは、書き換えられません。公式はSSTableは、Cassandraがデータを保管先に残すために使う、変更されないデータのファイルであると定めています。
変更しないので、新しい内容は別のファイルとして足されます。放っておくとファイルが増え続けるので、あとでまとめ直します。
そのまとめ直しでどれだけ余分に書くかを数えました。
書き込んだ量 40,000MB。手元にためて 64MB ごとに落とす 落とした先がいっぱいになったら、次の段へまとめ直す 広がり 実際に書いた量 元の何倍 まとめ直した段 収まった段の上限 4倍 245,440MB 6.14倍 3段 40,960MB 10倍 184,640MB 4.62倍 2段 64,000MB 20倍 171,840MB 4.30倍 2段 256,000MB
広がり20倍でも4.30倍です。40000MBを書くために171840MBを書いています。
4倍にすると6.14倍まで増えます。設定1つで1.4倍の違いです。
書く量は増えるのに選ばれるのは、書き込む先がいつも末尾だからです。飛び飛びの位置を書き換えません。
同じ場所を書き換える方式では、書く量は1倍に近くなります。その代わり行ごとに違う位置へ書きに行きます。
索引を持つ場合の書きの重さはPostgreSQLの記事で数えていて、索引8個で20.4倍でした。どちらの方式にも、書く側の代償があります。
まとめ直すたびに、書く量が積み上がる。
まとめ直しの計算は単純な形に置いています。移す分と移す先の重なる分を書き直すものとし、2倍で数えました。実際には重なり方が段や時期で変わるため、この値そのものは目安です。鍵の偏りも式で作ったもので、実在の分布ではありません。ここで見せているのは、書き込んだ量と実際に書く量が数倍違うこと、その倍率が設定で変わることの2つです。
SSTables are the immutable data files that Cassandra uses for persisting data on disk.原文Apache Cassandra 公式ドキュメント「Storage Engine」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る