我一直在使用 Elasticsearch,这可以解决这个问题...假设您愿意使用 Elassandra 而不是 Cassandra。
搜索系统会维护许多统计信息,并且在最后一次更新后的几秒钟内,它应该可以很好地了解您在一个表中有多少行。
这是一个Match All Query 请求,它为您提供信息:
curl -XGET \
-H 'Content-Type: application/json' \
"http://127.0.0.1:9200/<search-keyspace>/_search/?pretty=true" \
-d '{ "size": 1, "query": { "match_all": {} } }'
<search-keyspace> 是 Elassandra 创建的键空间。它通常被命名为<keyspace>_<table>,因此如果您有一个名为foo 的键空间和一个名为bar 的表,则该URL 将使用.../foo_bar/...。如果您想获取所有表中的总行数,则只需使用/_search/。
输出是一个如下所示的 JSON:
{
"took" : 124,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 519659, <-- this is your number
"max_score" : 1.0,
"hits" : [
{
"_index" : "foo_bar",
"_type" : "content",
"_id" : "cda683e5-d5c7-4769-8e2c-d0a30eca1284",
"_score" : 1.0,
"_source" : {
"date" : "2018-12-29T00:06:27.710Z",
"key" : "cda683e5-d5c7-4769-8e2c-d0a30eca1284"
}
}
]
}
}
就速度而言,无论行数如何,这都需要几毫秒。我有数百万行的表格,它就像一个魅力。无需等待数小时或类似的时间。
正如其他人所提到的,Elassandra 仍然是许多计算机大量并行使用的系统。如果您一直有很多更新,计数器将迅速变化。因此,只有当您阻止进一步更新足够长的时间以使计数器结算时,您从 Elasticsearch 获得的数字才是正确的。否则它总是一个近似的结果。