Spring数据Cassandra和PreparedStatementCache

问题描述 投票:1回答:1

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

我想用不同的参数值多次执行“ INSERT”语句。我目前还没有映射域类,所以我使用Spring Data提供的CqlOperations接口。

[当我只使用execute(String cql, Object... args)时,Cassandra驱动程序抱怨“通常,重新准备已经准备好的查询是一种反模式,可能会影响性能。考虑只准备一次语句”。因为Spring Data使用SimplePreparedStatementCreator。但是我看不出有任何办法告诉Spring Data使用CachedPreparedStatementCreator。我所看到的只是execute(PreparedStatementCreator psc)方法,该方法不允许我提供参数值。

所以,有没有办法告诉Spring Data使用适当的语句缓存或实现类似于execute(PreparedStatementCreator, Object...)的东西?

java spring cassandra spring-data spring-data-cassandra
1个回答
2
投票

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

CqlTemplate确实有意不进行缓存,因为缓存会导致时间与空间的关系。 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);
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.