Cassandra 具有长 IN 运算符的慢速(rpc 超时)读取请求
Posted
技术标签:
【中文标题】Cassandra 具有长 IN 运算符的慢速(rpc 超时)读取请求【英文标题】:Cassandra have slow(rpc timeout) read request with long IN operator 【发布时间】:2013-08-12 12:47:31 【问题描述】:我有下一个表结构:
SELECT * FROM v WHERE uid = 0x5103be34e695ba3c31000000;
uid | cid | v
----------------------------+-----------+-------
0x5103be34e695ba3c31000000 | 02j1Dy9G1 | True
0x5103be34e695ba3c31000000 | 03szNx7G1 | False
0x5103be34e695ba3c31000000 | 0SREjO9G1 | True
0x5103be34e695ba3c31000000 | 0bQ4Qn9G1 | True
0x5103be34e695ba3c31000000 | 0ojEVLWF1 | True
0x5103be34e695ba3c31000000 | 1NiWfO9G1 | True
0x5103be34e695ba3c31000000 | 1fSmhWGF1 | True
0x5103be34e695ba3c31000000 | 1o0Ri3TF1 | True
用户 (uid) 喜欢 (True) 或不喜欢 (False) 内容 (cid)
“用户喜欢内容吗?”
SELECT * FROM v WHERE uid = 0x5103be34e695ba3c31000000 AND cid IN ('Rqy9V79J',....more than 2000 cids...);
rpc timeout
Normal SELECT * FROM v WHERE uid = 0x5103be34e695ba3c31000000 works very fast.
如何使用 IN 加快读取请求?其他数据结构? 有任何想法吗?
【问题讨论】:
你能发布你的完整架构(创建表语句),包括任何索引吗? 您的集群中有多少个实例?如果您有多个,请将一致性设置为 local_quorum 并查看是否有相同的问题。 【参考方案1】:带有很多参数的IN-operator需要更多的内存给每个线程。
要修复它,请尝试设置 JVM_OPTS="$JVM_OPTS -Xss512k"
【讨论】:
以上是关于Cassandra 具有长 IN 运算符的慢速(rpc 超时)读取请求的主要内容,如果未能解决你的问题,请参考以下文章
Spark Cassandra 连接器 - 分区键上的范围查询