Java 利用Astyanax突变批将Map插入Cassandra CQL3柱族
我有一个Cassandra CQL3柱族,其结构如下Java 利用Astyanax突变批将Map插入Cassandra CQL3柱族,java,cassandra,cql3,astyanax,Java,Cassandra,Cql3,Astyanax,我有一个Cassandra CQL3柱族,其结构如下 CREATE TABLE mytable( A text, B text, C text, mymap map<text,text>, D text, PRIMARY KEY (A,B,C) ); 虽然我可以通过在各个字段上创建带有@Component的POJO将数据插入其他列(即A、B、C、D),但我不确定如何处理映射插入,即插入mymap列 我创建的示例POJO是 public class TestC
CREATE TABLE mytable(
A text,
B text,
C text,
mymap map<text,text>,
D text,
PRIMARY KEY (A,B,C)
);
虽然我可以通过在各个字段上创建带有@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解决了这个问题。不要对Cassandra 2.0中的批插入抱太大希望。我尝试过类似的情况,但仍然比突变批次慢1000倍。
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;