2015-02-15 5 views
0

Я новичок в cassandra, и я пытаюсь ввести данные в cassandra с помощью batch_mutate. Так что, если у меня есть таблица с одним первичным ключом, все работалиCassandra: Использование составного первичного ключа с batch_mutate java

CREATE TABLE l4_temp1 (
    id int, 
    secidd int, 
    val int, 
    PRIMARY KEY ((id)) 
) WITH 
    bloom_filter_fp_chance=0.010000 AND 
    caching='KEYS_ONLY' AND 
    comment='' AND 
    dclocal_read_repair_chance=0.100000 AND 
    gc_grace_seconds=864000 AND 
    index_interval=128 AND 
    read_repair_chance=0.000000 AND 
    replicate_on_write='true' AND 
    populate_io_cache_on_flush='false' AND 
    default_time_to_live=0 AND 
    speculative_retry='99.0PERCENTILE' AND 
    memtable_flush_period_in_ms=0 AND 
    compaction={'class': 'SizeTieredCompactionStrategy'} AND 
    compression={'sstable_compression': 'LZ4Compressor'}; 

Но когда я использую составной первичный ключ, он не

CREATE TABLE l4_temp1 (
    id int, 
    secidd int, 
    val int, 
    PRIMARY KEY ((id),secid) 
) WITH 
    bloom_filter_fp_chance=0.010000 AND 
    caching='KEYS_ONLY' AND 
    comment='' AND 
    dclocal_read_repair_chance=0.100000 AND 
    gc_grace_seconds=864000 AND 
    index_interval=128 AND 
    read_repair_chance=0.000000 AND 
    replicate_on_write='true' AND 
    populate_io_cache_on_flush='false' AND 
    default_time_to_live=0 AND 
    speculative_retry='99.0PERCENTILE' AND 
    memtable_flush_period_in_ms=0 AND 
    compaction={'class': 'SizeTieredCompactionStrategy'} AND 
    compression={'sstable_compression': 'LZ4Compressor'}; 

Как ссылочный код я использовал стресс от Apache Cassandra коды. Это простой пример кода:

List<Column> columns = new ArrayList<Column>(session.getColumnsPerKey()); 
    String [] arr = {"id","secid"}; 
    for (int i = 0; i < 2; i++) 
    { 
     columns.add(new Column(ByteBufferUtil.bytes(arr[i])) 
         .setValue(ByteBufferUtil.bytes(i)) 
         .setTimestamp(FBUtilities.timestampMicros())); 
    } 


    Map<String, List<Mutation>> row = getColumnsMutationMap(columns); 
    Map<ByteBuffer, Map<String, List<Mutation>>> record = Collections.singletonMap(ByteBufferUtil.bytes(i), row); 
      client.batch_mutate(record, session.getConsistencyLevel()); 

Так что я понимаю, что я что-то пропустил, но я не могу найти хороший пример, поэтому, пожалуйста, помогите мне с этим.

+0

Похоже, что вы используете бережливость апи с таблицей CQL , Это намеренно? Я бы рекомендовал использовать драйвер datastax java, как рекомендовано в ответе akshat, который использует собственный интерфейс протокола. –

ответ

1

Не могли бы вы правильно таблица создать заявление

CREATE TABLE l4_temp1 (
id int, 
secidd int, 
val int, 
PRIMARY KEY ((id),**secidd**)) 

Я был в состоянии написать с помощью CQL Batch и драйвер Datastax Java

String query = "INSERT INTO test.l4_temp1 (id, secidd, val) VALUES (?, ?, ?)"; 

    Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1") 
      .build(); 
    Session session = cluster.newSession(); 

    PreparedStatement stmt = session.prepare(query); 

    Integer[][] columns = { { 1, 10, 200 }, { 2, 20, 2500 }, { 3, 20, 2567 }, 
      { 4, 30, 256 }, { 5, 40, 2432 } }; 

    for (int i = 0; i < columns.length; i++) { 
     session.execute(stmt.bind(new Integer[] { columns[i][0], columns[i][1], 
       columns[i][0] })); 

    } 
    session.close(); 

Maven Dependency 
<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-core</artifactId> 
    <version>2.1.0</version> 
</dependency> 
+0

Hi akshat thakar,
проблема в том, что мне нужна партия, а не одна за другим –

+0

Вы можете делать партии с CQL, используя BatchStatement: http://www.datastax.com/drivers/java/2.0/com/datastax/driver/ core/BatchStatement.html –

+0

Большое спасибо за работу –

Смежные вопросы