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);
}
}
我不明白如何使用 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);
}
}