Java 如何只准备一次Cassandra访问器查询
我在用电脑。为了使用Java 如何只准备一次Cassandra访问器查询,java,cassandra,cassandra-2.0,datastax-java-driver,Java,Cassandra,Cassandra 2.0,Datastax Java Driver,我在用电脑。为了使用对象映射器,我创建了一个访问器 @Accessor public interface MyAccessor { @Query("SELECT * FROM my_table WHERE id = ? AND event_day = ? AND event_time > ? AND event_time < ?") Result<MyEvent> getEvents(UUID id, String eventDay, Date event
对象映射器
,我创建了一个访问器
@Accessor
public interface MyAccessor
{
@Query("SELECT * FROM my_table WHERE id = ? AND event_day = ? AND event_time > ? AND event_time < ?")
Result<MyEvent> getEvents(UUID id, String eventDay, Date eventFromDate, Date eventToDate);
}
@Accessor
公共接口访问器
{
@查询(“从my_表中选择*,其中id=?和event_day=?和event_time>?和event_time<?”)
结果getEvents(UUID id、字符串eventDay、日期eventFromDate、日期eventToDate);
}
我在如下方法中使用此访问器:
public List<MyEvent> getEvents(UUID id, String eventDay, Date eventFromDate, Date eventToDate)
{
MappingManager manager = new MappingManager(_cassandraDatabaseManager.getSession());
MyAccessor myAccessor= manager.createAccessor(MyAccessor.class);
return myAccessor.getEvents(id, eventDay, eventFromDate, eventToDate).all();
}
公共列表getEvents(UUID id、字符串eventDay、日期eventFromDate、日期eventToDate)
{
MappingManager=新的MappingManager(_cassandraDatabaseManager.getSession());
MyAccessor MyAccessor=manager.createAccessor(MyAccessor.class);
返回myAccessor.getEvents(id、eventDay、eventFromDate、eventToDate).all();
}
在我的应用程序中,我多次调用此方法,并在日志中收到以下警告:
Re-preparing already prepared query SELECT * FROM my_table WHERE id = ? AND event_day = ? AND event_time > ? AND event_time < ?. Please note that preparing the same query more than once is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once.
重新准备已准备好的查询从my_表中选择*,其中id=?活动日=?和事件时间>?事件时间<?。请注意,多次准备同一查询通常是一种反模式,可能会影响性能。考虑只准备一次陈述。
使用Cassandra存取器的最佳实践是什么?我是否应该只创建一次访问器
,然后缓存它
我应该只创建一次访问器,然后缓存它吗
您至少应该缓存
MappingManager
。它在内部缓存访问器实例,因此在同一管理器实例上连续调用createAccessor
,只需查找哈希映射即可。如果要避免这种查找,也可以缓存访问器实例。谢谢。我在CassandraDatabaseManager单例中添加了MappingManager
的创建,一切都很好。奇怪的是,我找不到任何有关这方面的信息。Datastax文档中没有关于此主题的内容。