2017-12-28 28 views
0

私は、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'};

+0

パーティションキーに移動した列のサイズはどのくらいですか? –

+0

@AlexOtt上記の表では、日付(タイプ日付)をタイムスタンプタイプの列に置き換えました。データと時間の両方の列を含めると、同じ問題が発生します。私はカーディナリティを参照しています。なぜなら、時間を追加すると(解像度のために)さらに多くのパーティションが生成されるはずですが、行サイズは変更されないからです。私は多くのパーティションが必要だとは思わないが、私は主キーとエラーの関係を理解し​​ようとしている。 – MattK

答えて

2

私はあなたがCaused by: com.datastax.driver.core.exceptions.InvalidQueryException: Batch too largeエラーを意味推測?

これは、単一のバッチでデータのデフォルトの50KBによってあるパラメータbatch_size_fail_threshold_in_kbである - とcassandra.ymlでbatch_size_warn_threshold_in_kb介して5KB閾値で以前に警告(http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/configuration/configCassandra_yaml.html参照)もあります。

データモデルを共有できますか?カラムを追加するだけで、パーティションキーが変更されるわけではありません。クラスタリングカラムを追加するだけでプライマリキーを変更しただけかもしれません。ヒント:PRIMARY KEY (a,b,c,d)はパーティションキーとしてaのみを使用し、PRIMARY KEY ((a,b),c,d)はパーティションキーとしてa,bを使用します。間違いは間違いです。

これ以外にも、追加の列にはスペースが必要です。今度は簡単にしきい値に達することができ、バッチサイズを減らして再び限界に収まるようにします。一般的に、あなたが言及したように単一のパーティションに影響を与えるupsertsだけをバッチする良い方法です。また、非同期クエリを使用して、異なるコーディネータに並列要求を行い、さらに高速化します。

+0

私はデータモデルを投稿しますが、この場合は列を追加するのではなく、他のものよりもカーディナリティの高いPKに1つ移動します。行の幅は変わりません。 – MattK

+0

上記の表が追加されました。 – MattK

+0

問題は実際に挿入されるバッチのサイズであり、結果のパーティションのサイズではありません。 – MattK

関連する問題