How to multi insert rows in cassandra

前端 未结 5 2331
北海茫月
北海茫月 2021-02-18 23:29

What is the most efficient way of inserting multiple rows in cassandra column family. Is it possible to do this in a single call.

Right now my approach is to addinsert m

5条回答
  •  温柔的废话
    2021-02-19 00:00

    CQL contains a BEGIN BATCH...APPLY BATCH statement that allows you to group multiple inserts so that a developer can create and execute a series of requests (see http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0).

    The following worked for me (Scala):

    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));
    

    If you don't know in advance which statements you want to execute, you can use the following syntax (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)
    

    Note: BatchStatement can only hold up to 65536 statements. I learned that the hard way. :-)

提交回复
热议问题