卡桑德拉的 cqlsh 控制台中的操作超时错误
我有一个三个节点Cassandra Cluster,我创建了一个超过2,000,000行的表。
当我在cqlsh中执行此()查询时,我得到了这个错误:select count(*) from userdetails
操作超时输出:错误={},last_host=192.168.1.2
当我运行计数函数的行数较少或限制为50,000时,它工作正常。
我有一个三个节点Cassandra Cluster,我创建了一个超过2,000,000行的表。
当我在cqlsh中执行此()查询时,我得到了这个错误:select count(*) from userdetails
操作超时输出:错误={},last_host=192.168.1.2
当我运行计数函数的行数较少或限制为50,000时,它工作正常。
count(*) 实际上遍历了所有数据。因此,没有限制的 a 预计会在有那么多行的情况下超时。这里有一些细节:http://planetcassandra.org/blog/counting-key-in-cassandra/select count(*) from userdetails
你可能需要考虑自己维护计数,使用Spark,或者如果你只是想要一个球场号码,你可以从JMX获取它。
要从JMX中获取,根据您的数据模型,它可能有点棘手。要获取分区数,请获取 mbean 并求和所有 90 个值(这是输出)。它只会给你sstables中存在的数字,所以为了更准确,你可以做一个刷新或尝试从mbean估计内存表中的数字。org.apache.cassandra.metrics:type=ColumnFamily,keyspace={{Keyspace}},scope={{Table}},name=EstimatedColumnCountHistogram
nodetool cfstats
MemtableColumnsCount
对于一个非常基本的大概数字,您可以从列出的所有范围中获取估计的分区计数(请注意,这只是一个节点上的数字)。将其乘以节点数,然后除以RF。system.size_estimates
您还可以在 cqlsh 命令中增加超时,例如:
cqlsh --request-timeout 120 myhost