私は、Python(DataStax)ドライバとCQL BatchStatements [1]を介してCassandra 3.12に挿入しています。少数のパーティション(10-20)をもたらす主キーを使用すると、すべて正常に動作しますが、ノード間でデータが均等に分散されません。主キーのカーディナリティによってPartition Too Largeエラーが発生しましたか?
たとえば、日付に加えて時刻やクライアントIPなどの高カーディナリティー列を含めると、行数と行長が同じでも、バッチ挿入の結果、「パーティションが大きすぎます」というエラーが発生します。
カーディナリティキーが高いほど、パーティションのサイズは小さくなります。より多くのパーティションを生成するキーは、どのようにしてこのエラーにつながりますか?
[1]私が読んでいるすべてのものが一つだけのパーティションをカバーバッチとバッチインサートがアンチパターンであり得ることを示唆するが、私はまだこの場合の非同期または現在のインサートに比べて最高のスループットを参照してください。
CREATE TABLE test ( date date, time time, cid text, loc text, src text, dst text, size bigint, s_bytes bigint, d_bytes bigint, time_ms bigint, log text, PRIMARY KEY ((date, loc, cid), src, time, log) ) WITH compression = { 'class' : 'LZ4Compressor' } AND compaction = {'compaction_window_size': '1', 'compaction_window_unit': 'DAYS', 'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'};
パーティションキーに移動した列のサイズはどのくらいですか? –
@AlexOtt上記の表では、日付(タイプ日付)をタイムスタンプタイプの列に置き換えました。データと時間の両方の列を含めると、同じ問題が発生します。私はカーディナリティを参照しています。なぜなら、時間を追加すると(解像度のために)さらに多くのパーティションが生成されるはずですが、行サイズは変更されないからです。私は多くのパーティションが必要だとは思わないが、私は主キーとエラーの関係を理解しようとしている。 – MattK