在Cassandra中使用对象映射器批量插入

时间:2016-03-11 05:43:19

标签: java cassandra datastax nosql

使用cassandra对象映射器api想要进行批处理持久化。

对于单个对象,它工作正常。

Mapper<MyObj> mapper = new MappingManager(getSession()).mapper(MyObj.class);
mapper.save(myObj);

对于批量更新我试过这种方式,但理想情况下Cassandra认为我持久化列表所以它给出了像@Table注释一样的异常在List中找不到,这是预期的行为

Mapper<List<MyObj>> mapper = new MappingManager(getSession()).mapper(List.class);
myObjList.add(myObj1)
myObjList.addd(myObj2)
mapper.save(myObjList);

有没有办法在使用批次的cassandra中实现相同的目标?

注意:或者我可以通过使用for循环重复第一步来完成此操作,但我正在寻找批量插入@ObjectMapper。

2 个答案:

答案 0 :(得分:7)

以下是我想在上述主题中总结@adutra讨论的片段。

你可以利用随cassandra-core驱动程序提供的BatchStatement,它与cassandra-mapper非常兼容。

Mapper<MyObj> mapper = new MappingManager(getSession()).mapper(MyObj.class);
BatchStatement batch = new BatchStatement();
batch.add(mapper.saveQuery(myObj1));
batch.add(mapper.saveQuery(myObj2));
session.execute(batch);

答案 1 :(得分:3)

Datastax对象映射器框架中没有批量插入实用程序。

你可以像你建议的那样在for循环中逐个插入你的实体,或者寻找更高级的映射框架,例如Achilles