如何使用 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 可用:
- CqlTemplate
- AsyncCqlTemplate
- ReactiveCqlTemplate
- CassandraTemplate
- AsyncCassandraTemplate
- ReactiveCassandraTemplate
前一个 ingest
方法接受一个 CQL 字符串和 List
个 List
个参数。我们简化了这种情况,因为 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);
有两点不同:
- 您负责迭代参数
- 您收到一个
ListenableFuture
允许您同步以成功和异常执行。
在旧版本的 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 可用:
- CqlTemplate
- AsyncCqlTemplate
- ReactiveCqlTemplate
- CassandraTemplate
- AsyncCassandraTemplate
- ReactiveCassandraTemplate
前一个 ingest
方法接受一个 CQL 字符串和 List
个 List
个参数。我们简化了这种情况,因为 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);
有两点不同:
- 您负责迭代参数
- 您收到一个
ListenableFuture
允许您同步以成功和异常执行。