カサンドラは初めてです。Datastax の Cassandra PHP ドライバーを使用しています。複数の挿入を含むバッチ ステートメントを作成しようとしています。テーブル モデルを考えると、次のようになります。
CREATE TABLE real_time_log (
du_id int,
tag_id int,
status int,
time_stamp bigint,
value float,
PRIMARY KEY ((du_id, tag_id), status, time_stamp)
)
次の値を 2 つの方法で挿入しようとしています。
$batch = new Cassandra\BatchStatement();
$stmt = $this->cassandraDb->prepare('insert into real_time_log'
. ' (du_id, tag_id, status, time_stamp, value) '
. 'VALUES (?, ?, ?, ?, ?)');
foreach ($curData as $cData) {
$values = explode(',', $cData);
$stmtValues = array(
'du_id' => 11111,
'tag_id' => 22222,
'status' => (int) $values[2],
'time_stamp' => new Cassandra\Bigint($values[0]),
'value' => (double) $values[1]
);
$batch->add($stmt, $stmtValues);
}
$this->cassandraDb->executeAsync($batch);
これによりエラーが発生します。
PHP Fatal error: Uncaught exception 'Cassandra\Exception\InvalidArgumentException' with message 'Invalid value type'
その間、私は準備されたステートメントなしでより簡単なアプローチを試みました:
$batch = new Cassandra\BatchStatement();
foreach ($curData as $cData) {
$values = explode(',', $cData);
$stmtValues = array(
11111,
22222,
(int) $values[2],
new Cassandra\Bigint($values[0]),
(double) $values[1]
);
$batch->add(new Cassandra\SimpleStatement('insert into real_time_log'
. ' (du_id, tag_id, status, time_stamp, value) '
. 'VALUES (' . implode(',', $stmtValues) . ')'));
}
$this->cassandraDb->executeAsync($batch);
この方法ですべてが機能しますが、確実に遅くなります。私が行っている準備済みステートメントのアプローチの何が問題なのか、誰かが説明できるでしょうか?
前もって感謝します。