ajj*_*ain 14 insert cassandra batch-insert
在cassandra列族中插入多行的最有效方法是什么.是否可以在一次通话中完成此操作.
现在我的方法是添加多个列然后执行.在一个电话中,我坚持一行.我正在寻找策略,以便我可以进行批量插入.
Pri*_*sai 23
CQL附带了一个BEGIN BATCH ... APPLY BATCH语句,可以将多个插入组合在一起,这样开发人员就可以构建一个这样的批处理请求的字符串并执行它.[ http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0]
以下对我有用:
PreparedStatement ps = session.prepare(
"BEGIN BATCH" +
"INSERT INTO messages (user_id, msg_id, title, body) VALUES (?, ?, ?, ?);" +
"INSERT INTO messages (user_id, msg_id, title, body) VALUES (?, ?, ?, ?);" +
"INSERT INTO messages (user_id, msg_id, title, body) VALUES (?, ?, ?, ?);" +
"APPLY BATCH" );
session.execute(ps.bind(uid, mid1, title1, body1, uid, mid2, title2, body2, uid, mid3, title3, body3));
Run Code Online (Sandbox Code Playgroud)
如果您事先不知道要执行的语句,可以使用以下语法(Scala):
var statement: PreparedStatement = session.prepare("INSERT INTO people (name,age) VALUES (?,?)")
var boundStatement = new BoundStatement(statement)
val batchStmt = new BatchStatement()
batchStmt.add(boundStatement.bind("User A", "10"))
batchStmt.add(boundStatement.bind("User B", "12"))
session.execute(batchStmt)
Run Code Online (Sandbox Code Playgroud)
注意:BatchStatement最多可以包含65536语句.很难理解这一点.:-)
PreparedStatement 和 binding 值可能是更好的选择。下面是几篇关于 Batch 使用和误用的好文章:
您可以将多个插入语句添加到文件中并使用“cqlsh -f”执行该文件。
您还可以使用 CQL 执行批量插入到 cassandra,如以下链接所述: http://www.datastax.com/documentation/cassandra/1.2/index.html#cassandra/cql_reference/batch_r.html
| 归档时间: |
|
| 查看次数: |
26314 次 |
| 最近记录: |