Cassandra select查询给出Gocql驱动程序超时错误
我在同时执行2000多个SELECT查询时遇到超时错误。我正在为Cassandra 3.7(JAVA版本8)使用gocql客户端 “错误”:“gocql:超时期间未收到卡桑德拉的响应” 我将下表作为模式 下面是我的查询,它在同时执行2000多个查询时给出超时错误Cassandra select查询给出Gocql驱动程序超时错误,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我在同时执行2000多个SELECT查询时遇到超时错误。我正在为Cassandra 3.7(JAVA版本8)使用gocql客户端 “错误”:“gocql:超时期间未收到卡桑德拉的响应” 我将下表作为模式 下面是我的查询,它在同时执行2000多个查询时给出超时错误 "SELECT * FROM my_db.my_message WHERE id=? AND status = ?" “id”是where子句中的主键,“status”是次索引。 “message_id”也是主键,但不在此选择查询中使
"SELECT * FROM my_db.my_message WHERE id=? AND status = ?"
“id”是where子句中的主键,“status”是次索引。
“message_id”也是主键,但不在此选择查询中使用
任何帮助都将不胜感激。提前感谢。不要对频繁更新或删除的列使用索引 记住什么时候不使用索引
- 查询大量记录以获得少量结果的高基数列
- 在使用计数器列的表中
- 在经常更新或删除的列上
- 在大分区中查找行,除非是狭义查询
status
的基数较低,并且经常更新。由于您通过提供分区键id
来缩小搜索范围,所以低基数对您来说不是问题主要问题是您经常更新索引列状态。每次更新cassandra时,存储一个墓碑
Cassandra在索引中存储墓碑,直到墓碑限制达到100K个单元格。超过逻辑删除限制后,使用索引值的查询将失败
因此,您应该在应用程序层中按状态列值筛选数据。
"SELECT * FROM my_db.my_message WHERE id=? AND status = ?"