繁体   English   中英

Cassandra Java 驱动程序警告

[英]Cassandra java driver warning

我一直在日志中看到此消息,主要是每次进行查询时。

查询 SELECT username AS col6,gender AS col1,last_name AS col2,email AS col3,first_name AS col4,something_uuid AS col5,group_email AS col7,deleted AS col8,puars AS col9 FROM something_data WHERE username=?; 未在 /XX.YY.91.205:9042 上准备,在重试执行之前准备。 多次看到此消息是好的,但看到很多次可能会导致性能问题。

使用 mapper.get("username") ---> com.datastax.driver.mapping.Mapper 进行查询

这就是我在构造函数中初始化映射器的方式。 之后我不再使用 mappingManager 了。

this.mapper = mappingManager.mapper(MyPojo.class);

任何线索为什么?

看起来您并没有长时间保留MappingManager的实例,而是在每次获取数据时重新创建它。 这是一个大错误 - MappingManager应该与ClusterSession对象具有相同的生命周期。

映射管理器负责从您的类中提取字段注释、生成查询、准备它们然后执行。 准备好的查询被缓存在映射管理器中,所以当它被破坏时,缓存就会丢失,当你再次尝试执行get时,这个过程会重复,导致显着的开销 - 查询需要再次准备,这是重要的网络开销,因此实际上您的查询比使用未准备好的查询要慢。

只需将MappingManager实例移动到某个静态块,这样它就可以重用于所有映射器操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM