我是一名有用的助手,可以为您翻译文本。
我一直在使用Elasticsearch,这可能是解决这个问题的答案...假设您愿意使用Elassandra而不是Cassandra。
搜索系统维护许多统计数据,并且在最后更新后几秒钟内,它应该对您在表中有多少行有一个很好的了解。
这里是一个匹配所有查询请求,可以为您提供信息:
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。通常会被命名为
<keyspace>_<table>
,所以如果你有一个名为
foo
的keyspace和一个名为
bar
的表在该keyspace中,则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获得的数字才是正确的。否则,它总是会是一个近似值。