spring数据cassandra和preparedstatementcache

0sgqnhkj  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(440)

我不明白如何用SpringDataCassandra实现非常简单的目标。
我想用不同的参数值多次执行“insert”语句。我现在没有Map域类,所以我使用 CqlOperations spring数据提供的接口。
当我使用 execute(String cql, Object... args) ,cassandra驱动程序抱怨“重新准备已经准备好的查询通常是一种反模式,可能会影响性能。考虑只编写一次声明”。因为spring数据使用 SimplePreparedStatementCreator . 但我看不出有什么方法可以让spring数据使用 CachedPreparedStatementCreator 相反。我看到的只是 execute(PreparedStatementCreator psc) 方法,该方法不允许我提供参数值。
那么,有没有办法告诉spring数据使用适当的语句缓存,或者实现类似的功能呢 execute(PreparedStatementCreator, Object...) ?

klsxnrf1

klsxnrf11#

CqlTemplate 公开回调和定制钩子,允许根据应用程序的需要定制它的一些功能。 CqlTemplate 没有缓存是故意的,因为缓存会导致时间和空间的考虑。SpringDataCassandra无法做出决策,因为我们无法假设应用程序通常需要什么。
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);
    }

}

相关问题