Spring 数据 Cassandra 和 PreparedStatementCache

Spring Data Cassandra and PreparedStatementCache

我不明白如何使用 Spring Data Cassandra 实现非常简单的目标。

我想用不同的参数值多次执行 "INSERT" 语句。我目前没有映射域 class,所以我使用 Spring Data.

提供的 CqlOperations 接口

当我只使用 execute(String cql, Object... args) 时,Cassandra 驱动程序抱怨 "Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once"。因为 Spring 数据使用 SimplePreparedStatementCreator。但是我看不出有什么方法可以告诉 Spring 数据改用 CachedPreparedStatementCreator。我所看到的只是 execute(PreparedStatementCreator psc) 方法,它不允许我提供参数值。

那么,有没有办法告诉 Spring 数据使用正确的语句缓存或实现类似于 execute(PreparedStatementCreator, Object...) 的东西?

CqlTemplate 公开回调和自定义挂钩,允许根据您的应用程序的需要定制其某些功能。

CqlTemplate 确实故意没有缓存,因为缓存会导致时间与 space 的考虑。 Spring Data Cassandra 无法做出决定,因为我们无法假设应用程序通常需要什么。

Spring Data Cassandra 的包 core.cql.support 附带了对 CachedPreparedStatementCreator 的支持和可用于该目的的 PreparedStatementCache

子类 CqlTemplate 并覆盖其 newPreparedStatementCreator(…) 方法以指定使用哪个 PreparedStatementCreator。以下示例显示了具有无限保留的缓存示例:

public class MyCachedCqlTemplate extends CqlTemplate {

    PreparedStatementCache cache = MapPreparedStatementCache.create();

    @Override
    protected PreparedStatementCreator newPreparedStatementCreator(String cql) {
        return CachedPreparedStatementCreator.of(cache, cql);
    }

}