如何使用 Spring 数据异步插入 Cassandra?

How to use insert asynchronously into Cassandra with Spring Data?

在旧版本的 Spring Data Cassandra 中,批处理是这样实现的:

String cqlIngest = "insert into person (id, name, age) values (?, ?, ?)";

List<Object> person1 = new ArrayList<Object>();
person1.add("10000");
person1.add("David");
person1.add(40);

List<Object> person2 = new ArrayList<Object>();
person2.add("10001");
person2.add("Roger");
person2.add(65);

List<List<?>> people = new ArrayList<List<?>>();
people.add(person1);
people.add(person2);

cassandraOperations.ingest(cqlIngest, people);

并且在最新版本文档中; https://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#repositories.query-methods batchOps 是在获取 CassandraBatchOperations 的 CQLTemplate 上引入的。但是这个 class 似乎是实体感知如下

template.batchOps().insert(new User()).execute();

有没有办法传入 cqlIngest 和上面给出的旧版本代码示例中的人?

我正在使用 Spring 2.0.7.RELEASE 和 Cassandra 驱动程序 3.5.0.

使用 Apache Cassandra 2.0 的 Spring 数据,重构并清理了 API。

以前,模板 API 是低级和高级功能的混合体,具有同步和异步执行模型,混搭成一个 class。

自 2.0 版以来,现在有以下 API 可用:

前一个 ingest 方法接受一个 CQL 字符串和 ListList 个参数。我们简化了这种情况,因为 ingest 在没有适当同步的情况下异步执行了 CQL。您可以通过 AsyncCqlTemplate.execute(…):

实现类似的功能
ListenableFuture<Boolean> insert1 = template.execute("insert into person (id, name, age) values (?, ?, ?)", 
                                                     "10000", "David", 40);
ListenableFuture<Boolean> insert2 = template.execute("insert into person (id, name, age) values (?, ?, ?)", 
                                                     "10001", "Roger", 65);

有两点不同:

  1. 您负责迭代参数
  2. 您收到一个 ListenableFuture 允许您同步以成功和异常执行。