java-Cassandra上已准备好的语句的最大数量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Cassandra上已准备好的语句的最大数量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2137字,纯文字阅读大概需要4分钟。
内容图文
![java-Cassandra上已准备好的语句的最大数量](/upload/InfoBanner/zyjiaocheng/682/2c9c429d86e44812a23610ae691562f9.jpg)
Backgound:我们正在使用Cassandra存储一些时间序列数据,并且正在使用准备好的语句来访问数据.
我们通过以下方式对表中的数据进行分区:
>时间段(例如一周或一个月),以及
>保留政策(例如1年,5年或10年)
对于不同的表,我们需要为查询,时间段和保留策略的每种组合准备(仅在使用时)不同的语句,因此,准备好的语句数量将激增.一些数学:
timePeriods = 12..52 * yearsOfData
maxNumOfPrepStatements = timePeriods * policies * numOfQueries
ourCase => (20 * 10 y) * 10 p * 10 q = 20.000 prep statements
在客户端,我只能将最常用的PS保留在高速缓存中,但是我找不到从服务器中删除未使用的PS的方法,因此我担心拥有大约20.000条准备好的语句对于每个节点来说可能都是很大的成本.
问题:此数量的PS会在服务器上引起任何问题吗?
这分为几个较小的问题:
>这些准备好的语句在服务器端的成本是多少?
>服务器将保留所有PS还是将删除使用较少的PS?
>是否有比重启Cassandra节点清理PS缓存更好的解决方案?
>使用Java客户端,关闭Session / Cluster对象会减轻这种情况(服务器端)吗?
解决方法:
How much will be the server side cost of those prepared statements?
每个准备好的语句将被解析,并使用其MD5摘要作为键进一步存储在缓存中.客户端即将进行重新注册的相同的准备语句将导致服务器将MD5摘要与现有语句进行匹配,因此应避免.执行已注册的语句将使客户端将MD5以及查询参数发送到服务器,并且服务器能够使用MD5检索缓存的语句,这比解析常规CQL语句执行得更快.每个缓存的语句还将占用Java堆的一部分,该部分与MD5键的总大小和语句对象的表示相对应.
Will the server keep all the PS or will it remove the less used ones?
服务器通过创建基于ConcurrentLinkedHashMap的缓存来管理准备好的语句.缓存的容量取决于可用的内存:Runtime.getRuntime().maxMemory()/256.条目也按其内存使用情况加权,大语句如果已达到容量,则首先从缓存中逐出.您可以使用org.apache.cassandra.metrics.CQL.PreparedStatementsEvicted JMX指标来监视此行为.
Is there a better solution than restarting Cassandra nodes to clean the PS cache?
不是我知道的.我也不太确定为什么要这么做,因为将为相同的查询创建相同的MD5摘要.另请注意,Java客户端会自动在服务器上找不到re-register prepared statements,例如如果已将其从缓存中逐出(另请参见this answer).
using the Java client, will closing the Session / Cluster object alleviate this (server side)?
我不这么认为.服务器必须跟踪数百个潜在客户已注册了哪些语句,以便安全地清理它们.
内容总结
以上是互联网集市为您收集整理的java-Cassandra上已准备好的语句的最大数量全部内容,希望文章能够帮你解决java-Cassandra上已准备好的语句的最大数量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。