cassandra - 使用 Cassandra 和 CQL3,如何在单个请求中插入整个宽行?

标签 cassandra cql3 datastax-java-driver

我想在 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 个名称/值对,我只想在单个请求/操作中将单行插入到 Cassandra 中,以便尽可能快。

我似乎唯一能找到的是执行以下 50,000 次:
INSERT INTO results (row_id, index, value) values (my_row_id, ?, ?);

第一 ? is 是一个索引计数器( i )和第二个 ?是要存储在位置 i 的文本值.

这需要很多时间。即使我们把上面的 INSERT 放到一个批处理中,也需要很多时间。

我们拥有我们需要的所有数据(完整的行),我认为只需说“在这里,Cassandra,将这些数据存储为一个请求中的一行”是很容易的,例如:
//EXAMPLE-BUT-INVALID CQL3 SYNTAX:
insert into results (row_id, (index,value)) values 
    ((0,text0), (1,text1), (2,text2), ..., (N,textN));

此示例无法通过当前的 CQL3 语法实现,但我希望它说明了所需的效果:所有内容都将作为单个查询插入。

是否可以在 CQL3 和 DataStax Java 驱动程序中执行此操作?如果没有,我想我将被迫使用 Hector 或 Astyanax 驱动程序和 Thrift batch_insert操作代替?

最佳答案

通过使用突变多映射,可以使用 Thrift API 中的 batch_mutate 方法完成多个插入/更新。

Map<byte[], Map<String, List<Mutation>>> mutationMap = new HashMap<byte[], Map<String, List<Mutation>>>();

List<Mutation> mutationList = new ArrayList<Mutation>();

mutationList.add(mutation);
Map<String, List<Mutation>> m = new HashMap<String, List<Mutation>>();

m.put(columnFamily, mutationList);

mutationMap.put(key, m);
client.batch_mutate(mutationMap, ConsistencyLevel.ALL);

关于cassandra - 使用 Cassandra 和 CQL3,如何在单个请求中插入整个宽行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522191/

相关文章:

Cassandra 。没有足够的可用副本 - Java 驱动程序行为与 CQL 控制台不同

transactions - 使用轻量级事务的含义是什么?

Cassandra 压缩宽行大分区

c++ - 使用 libcql 的 Cassandra 表的列名

cassandra - 如何监控cassandra中的连接数

cassandra - 基于统计在 cassandra 中获取数据点

cassandra - 不匹配的输入 ')' 期望 CQL 中的 EOF

java - 发现来自另一个数据中心的节点

cassandra - 如何归档和清除 Cassandra 数据

cassandra - 如何设置 "cassandra-topology.properties"的路径?