0

カサンドラに多数のレコード(一度に5百万件以上)を書き込もうとしています。これらはタブで区切られたファイルから読み込まれ、executeAsyncを使用してCassandraにインポートされます。 私たちはより一般的になるより小さなデータセット(〜330kレコード)を使用してきました。最近まで、私たちのスクリプトは約65kレコードでのインポートを静かに止めていました。 RAMを2Gbから4Gbにアップグレードして以来、インポートするレコードの数は倍増していますが、まだすべてのレコードを正常にインポートしていません。多数の書き込みを実行するときのカサンドラの問題

これは私たちが現在動作しているプロセスの例です:

$cluster = \Cassandra::cluster()->withContactPoints('127.0.0.1')->build(); 
$session = $cluster->connect('example_data'); 

$statement = $session->prepare("INSERT INTO example_table (example_id, column_1, column_2, column_3, column_4, column_5, column_6) VALUES (uuid(), ?, ?, ?, ?, ?, ?)"); 
$futures = array(); 
$data = array(); 

foreach ($results as $row) { 
    $data = array($row[‘column_1’], $row[‘column_2’], $row[‘column_3’], $row[‘column_4’], $row[‘column_5’], $row[‘column_6’]); 
    $futures = $session->executeAsync($statement, new \Cassandra\ExecutionOptions(array(
     'arguments' => $data 
    ))); 
} 

私たちは、これがダウンスペースが不足してヒープにあるかもしれないことを疑う:

DEBUG [SlabPoolCleaner] 2017-02-27 17:01:17,105 ColumnFamilyStore.java:1153 - Flushing largest CFS(Keyspace='dev', ColumnFamily='example_data') to free up room. Used total: 0.67/0.00, live: 0.33/0.00, flushing: 0.33/0.00, this: 0.20/0.00 
DEBUG [SlabPoolCleaner] 2017-02-27 17:01:17,133 ColumnFamilyStore.java:854 - Enqueuing flush of example_data: 89516255 (33%) on-heap, 0 (0%) off-heap 

私たちはテーブル挿入このデータは次のとおりです。

CREATE TABLE example_data (
    example_id uuid PRIMARY KEY, 
    column_1 int, 
    column_2 varchar, 
    column_3 int, 
    column_4 varchar, 
    column_5 int, 
    column_6 int 
); 
CREATE INDEX column_5 ON example_data (column_5); 
CREATE INDEX column_6 ON example_data (column_6); 

私たちは、バッチ法が、Bを使用しようとしましたCassandraプロセスを高いCPU使用率(〜85%)で実行させるため、ここでは適切ではありません。

リポジトリから入手可能な最新バージョンのDSE/Cassandraを使用しています。

答えて

1

2GB(実際には4GB)は、開発や生産の際にカッサンドラに最低限推奨されるものでもありません。それを実行することは可能ですが、そのデフォルトより下に調整が必要です。たとえそれが問題を持ち続ける前に多くのパフォーマンスを期待してはいけません(エラーが出てくる)し、ノードを追加する必要があります。

https://docs.datastax.com/en/landing_page/doc/landing_page/planning/planningHardware.html

  • 生産512 GBに32ギガバイト。 Cassandraのみで最小8 GB、DataStax Enterpriseの分析および検索ノードで最小32 GBです。
  • 無負荷テスト環境での開発:4 GB以上。
  • DSEグラフ:特定のDSE検索またはDSE分析の組み合わせに加えて、2〜4 GB。大規模な専用グラフキャッシュが必要な場合は、さらにRAMを追加します。

また、スパムはexecuteAsyncで書き込み、バックプレッシャーは適用しません。最終的には、そのようなシステムはすべてオーバーランします。何らかの種類のスロットルやフィードバックを追加するか、同期要求を使用するだけです。

+0

ありがとう@Chris、私たちは今すぐうまく動作しています。スロットルについては、DataStax phpドライバに組み込まれているものがありますか? – deano23

+0

いいえ、私は十分に非同期メソッドを扱う良い方法を知っているphpに精通していません。おそらくリストに先物を入れ、リストが> 1000かそれとも最初のものを引っ張って 'get'をするのであれば、あなたは常に約1000人の飛行機を持っています。その数を微調整して、いくつかの性能数値に基づいて調整することができます(このような小型システムでは低いかもしれません)。 –

+0

ありがとう、クリス、これはとても役に立ちます。 – deano23

関連する問題