簡體   English   中英

使用Astyanax突變批將Map插入Cassandra CQL3列族

[英]Inserting Map into Cassandra CQL3 column family by using Astyanax mutation batch

我有一個具有以下結構的Cassandra CQL3色譜柱系列

CREATE TABLE mytable(
  A text,
  B text,
  C text,
  mymap map<text,text>,
  D text,
  PRIMARY KEY (A,B,C)
);

我正在嘗試使用Astyanax將一堆數據插入其中。

我正在使用的Cassandra版本是1.2,所以不能使用BATCH插入。

我知道我可以使用Prepared Statements在for循環中運行CQL3命令。

我想知道是否有可能使用Astyanax突變批處理將數據插入上述列族? 我意識到這將利用Astyanax Thrift接口插入CQL3列系列,但是為了提高性能,這是一個可行的選擇嗎?

我看了cassandra-cli中列族的結構,看起來像這樣

ColumnFamily: mytable
  Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type
  Default column value validator: org.apache.cassandra.db.marshal.BytesType
  Cells sorted by: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.ColumnToCollectionType(6974656d73:org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)))

雖然我可以通過在各個字段上使用@Component創建POJO來將數據插入其他列(即A,B,C,D),但我不確定如何處理地圖插入(即插入mymap)柱。

我創建的樣本POJO是

public class TestColumn {

  @Component(ordinal = 0)
  String bComponent;

  @Component(ordinal = 1)
  String cComponent;

  @Component(ordinal = 2)
  String columnName;

  public TestColumn() {
  }
}

插入代碼如下

AnnotatedCompositeSerializer columnSerializer = new  AnnotatedCompositeSerializer(TestColumn.class);
ColumnFamily columnFamily = new ColumnFamily("mytable", StringSerializer.get(), columnSerializer);

final MutationBatch m = keyspace.prepareMutationBatch();

ColumnListMutation columnListMutation = m.withRow(columnFamily, "AVal");

columnListMutation.putColumn(new TestColumn("BVal", "CVal", null),  ByteBufferUtil.EMPTY_BYTE_BUFFER,
                timeToLive);
columnListMutation.putColumn(new ApiAvColumn("BVal", "CVal", "D"), "DVal",
                timeToLive);
m.execute;

我應該如何准確地修改上面的代碼,以便也可以插入地圖值?

我們通過使用DataStax Java驅動程序而非Astyanax解決了這一問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM