0
Cassandraデータベースに大きなxlsx(100万行近く)のファイルを挿入する必要があります。メモリの制限のため、ファイルの作成方法に疑問があります。PHP datastaxドライバ - 大きなデータセットをインポート
バッチインサートを使用していますが、メモリに大きな影響を与えるため、不可能に近いことが証明されています。
$batch = new Cassandra\BatchStatement(Cassandra::BATCH_UNLOGGED);
foreach ($workbook->createRowIterator($myWorksheetIndex) as $rowIndex => $values) {
if ($count > 0) {
$time = is_int($values[3]) ? $values[2]->format('d-m-Y') . ' ' . date('00:00:00') : $values[2]->format('d-m-Y') . ' ' . $values[3]->format('H:i:s');
$date = date_convert(DateTime::createFromFormat('d-m-Y H:i:s', $time));
$prepared = $session->prepare(
"INSERT INTO teste (ptd_assoc,ref_equip,dates) " .
"VALUES (?, ?, ?)"
);
$batch->add($prepared, array(
'ptd_assoc' => $values[0],
'ref_equip' => $values[1],
'dates' => new Cassandra\Timestamp(strtotime($date)),
// 'load' => 3.4454
));
}
$count++;
}
$session->execute($batch);
xlsxをより読みやすいcsvファイルに変換できました。 Cassandra\SimpleStatement
メソッドを使用してデータベースにCopy
することは可能ですか?
'COPY'はcqlsh(シェル)コマンドであり、CQL(プロトコル)コマンドではありません。 私がphpでこれをしたいのであれば、唯一の方法はcqlshへのexec関数呼び出しです。同意する? –
私はサーバにアクセスするためにcqlshクライアントをインストールしましたが、コピーコマンドは私にこのエラーを返します。 ":1: 'module'オブジェクトには属性 'parse_options'がありません。 –
https://issues.apache.org/jira/browse/CASSANDRA-12284 のようなサウンドPHPを使用する必要がある場合は、非同期同時リクエストを作成することをおすすめします。すべての行を1つのバッチにロードすると、クライアント側とサーバー側の両方で問題が発生します。 –