使用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。
答案 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。