Cassandra 1.2.8 に 50,000 列の単一行を挿入したいと考えています。挿入する前に、行全体のすべてのデータを (メモリ内で) 使用する準備ができています。
+---------+------+------+------+------+-------+
| | 0 | 1 | 2 | ... | 49999 |
| row_id +------+------+------+------+-------+
| | text | text | text | ... | text |
+---------+------+------+------|------+-------+
列名は整数で、ページネーションのスライスが可能です。列の値は、その特定のインデックスの値です。
CQL3 テーブル定義:
create table results (
row_id text,
index int,
value text,
primary key (row_id, index)
)
with compact storage;
row_id と 50,000 個の名前/値のペアがすべてメモリにあるので、1 回の要求/操作で 1 行を Cassandra に挿入して、できるだけ高速に処理したいと考えています。
私が見つけたように見える唯一のことは、次の50,000回実行することです:
INSERT INTO results (row_id, index, value) values (my_row_id, ?, ?);
1 つ目?
はインデックス カウンター ( i
) で、2 つ目?
は location に格納するテキスト値ですi
。
これには多くの時間がかかります。上記の INSERT をバッチに入れても、かなりの時間がかかります。
必要なすべてのデータ (完全な行) がそろっています。たとえば、「Cassandra、このデータを 1 つの要求で 1 つの行として保存してください」と言うのは非常に簡単だと思います。たとえば、次のようになります。
//EXAMPLE-BUT-INVALID CQL3 SYNTAX:
insert into results (row_id, (index,value)) values
((0,text0), (1,text1), (2,text2), ..., (N,textN));
この例は、現在の CQL3 構文では実現できませんが、目的の効果が示されることを願っています。つまり、すべてが 1 つのクエリとして挿入されるということです。
CQL3およびDataStax Java Driverでこれを行うことは可能ですか? そうでない場合、代わりに Hector または Astyanax ドライバーと Thriftbatch_insert
操作を使用することを余儀なくされると思いますか?