如何只准备一次 Cassandra 访问器查询
How to prepare a Cassandra Accessor query only once
我正在使用Cassandra Java Driver。为了使用 Object Mapper
我创建了一个 Accessor
.
@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);
}
我在这样的方法中使用这个访问器:
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();
}
在我的应用程序中多次调用此方法,我在日志中收到以下警告:
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.
使用 Cassandra Accessor
的最佳做法是什么?我应该只创建一次 Accessor
然后缓存它吗?
Should I create the Accessor only once and then cache it?
您至少应该缓存 MappingManager
。它在内部缓存访问器实例,因此在同一个管理器实例上连续调用 createAccessor
只会花费您一次哈希映射查找。如果您想避免该查找,您也可以缓存访问器实例。
我正在使用Cassandra Java Driver。为了使用 Object Mapper
我创建了一个 Accessor
.
@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);
}
我在这样的方法中使用这个访问器:
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();
}
在我的应用程序中多次调用此方法,我在日志中收到以下警告:
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.
使用 Cassandra Accessor
的最佳做法是什么?我应该只创建一次 Accessor
然后缓存它吗?
Should I create the Accessor only once and then cache it?
您至少应该缓存 MappingManager
。它在内部缓存访问器实例,因此在同一个管理器实例上连续调用 createAccessor
只会花费您一次哈希映射查找。如果您想避免该查找,您也可以缓存访问器实例。