java - Cassandra java 驱动程序警告

标签 java cassandra datastax-java-driver

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

Query 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=?; is not prepared on /XX.YY.91.205:9042, preparing before retrying executing. Seeing this message a few times is fine, but seeing it a lot may be source of performance problems.

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

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

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

有什么线索吗?

最佳答案

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

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

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

关于java - Cassandra java 驱动程序警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203418/

相关文章:

cassandra - 无法连接到 cassandra - NoHostAvailableException

apache-spark - Spark Cassandra Java 集成问题

java - 一致性级别 ALL 使用 while statement has consistency level TWO defined

java - 如何在某一天单击鼠标时选择 jCalender 日期

java - 在Java中,有没有办法在同一个构造函数中调用this()和super()?

Cassandra rpc_timeout

mongodb - 电子商务/购物车(和结帐流程): use Relational or NoSQL

java - Cassandra 集群性能不佳

java - Bukkit - 为什么我的 Multimap 没有被通过?

java - 将 String.toCharArray() 放入 for 循环中是一个好习惯吗