3

次のような方法で Cassandra に単一のレコードを挿入できることはわかっています (以下の例はhereから取得したものです)。

final String INSERT_STATEMENT = "INSERT INTO employees (empID, deptID, first_name, last_name) VALUES (?, ?, ?, ?);";

result = keyspace
    .prepareQuery(CQL3_CF)
    .withCql(INSERT_STATEMENT)
    .asPreparedStatement()
    .withIntegerValue(222)
    .withIntegerValue(333)
    .withStringValue("Eric")
    .withStringValue("Cartman")
    .execute();

Astyanax の cql3 API (JDBC の executeBatch など) を使用して (複数のレコードに対して) バッチ挿入を行うことは可能ですか?

注: Astyanax の MutationBatch (CQL ではなく Thrift に基づく) を使用することは、私には選択肢のようには見えません。これと同じ問題が発生しているためです。

4

1 に答える 1

6

Astyanax を使用して以下を達成するには:

cqlsh を使用:

cqlsh:TEST_KS> INSERT INTO "MESSAGE_CF" (KEY, "DELETED_RECEIVER", "DELETED_SENDER", "SENDER") 
               VALUES ('user-1241324', 'Yes', 'No', 'user@mail.com');
cqlsh:TEST_KS> SELECT * FROM "MESSAGE_CF";                                                                   
 key          | DELETED_RECEIVER | DELETED_SENDER | RECEIVER | SENDER
--------------+------------------+----------------+----------+---------------
 user-1241324 |              Yes |             No |     null | user@mail.com

アステュアナクスと:

    Keyspace keyspace = Astyanax.getKeyspaceContext();
    ColumnFamily<String, String> mail = new ColumnFamily<String, String>(
        keyspace.getKeyspaceName(), // CF Name
        StringSerializer.get(),   // Key Serializer
        StringSerializer.get());  // Column Serializer

    // You could start looping here to alter what data is being inserted  
    // or make the method take in parameters and call it multiple times.         
    String  cqlStatement = 
            "INSERT INTO MESSAGE_CF (KEY, DELETED_RECEIVER, DELETED_SENDER, SENDER) "
            + "VALUES ('user-1281324', 'Yes', 'No', 'user@mail.com');";

    // execute the insertion
    OperationResult<CqlResult<String, String>> result = 
        keyspace.prepareQuery(mail).withCql(cqlStatement).execute();

   // stop looping

注: 準備済みステートメントではこれを達成できませんでした。Astyanax は、準備済みステートメントがサポートされていることをwiki (準備済み CQL の下) で示していますが、私は astyanax-1.56.21 を使用しており、asPreparedStatement()機能がありません。

また、これを機能させるには、CQL3 を使用するように AstyanaxContext を設定することを忘れないでください。

 new com.netflix.astyanax.impl.AstyanaxConfigurationImpl()      
     .setCqlVersion("3.0.0")) //using CQL3 

アップデート

バッチキーワードを調べます。バッチの高速化機能の主な要因は、ラウンドトリップを節約できることです。CQL ステートメントの管理は難しくなりますが、更新速度は向上します。CUD 操作 (挿入、更新、および削除) は実行できますが、SELECT は実行できません。また、 CQL3 のドキュメントを読んで、cql でできることを学ぶことをお勧めします。

于 2013-02-25T23:58:00.303 に答える