我有一个卡桑德拉CQL3列族结构如下插入到地图卡桑德拉CQL3列族使用Astyanax突变批量
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列系列,但为了高性能写入,这是一个可行的选择吗?
我接过一看列家族在卡桑德拉-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)))
虽然我可以将数据插入到其他列(即A,B,C,d )通过创建一个POJO @Component在各个领域,我不知道如何去处理地图插入即插入到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;
我究竟应该如何修改上面的代码,这样我可以插入图值以及?
不要对Cassandra 2.0中的批量插入抱有希望。我试过类似的情况,它仍然比变化批次慢1000倍。 http://stackoverflow.com/questions/21778671/how-to-insert-a-wide-row-with-good-performance-using-cql –