在Cassandra中从表中获取行计数的最佳方法是什么?

xwbd5t1u  于 2023-02-04  发布在  Cassandra
关注(0)|答案(3)|浏览(336)

有什么最好的方法可以得到Cassandra表的总行数吗?
问候你,Mani

3vpjnl9f

3vpjnl9f1#

  • DatastaxBulk可能是最容易安装和运行的。
  • Apache Spark Cassandra connector可能很方便。一旦 Dataframe 加载了sc.cassandraTable(),您就可以计算
  • 避免在代码中计数,因为它在执行集群的完整扫描时不会缩放,响应时间将以秒为单位。
  • 避免使用CQL select count(*)进行计数,因为您可能会很快遇到超时。
yacmzcpb

yacmzcpb2#

您可以简单地使用Count(*)从表中获取行号。
例如,
语法:

SELECT Count(*) 
FROM tablename;

预期输出是这样的

count
-------
     4

(1 rows)
lhcgjxsq

lhcgjxsq3#

背景
Cassandra有一个内置的CQL函数COUNT(),用于计算查询返回的行数。如果执行一个无界查询(没有过滤器或WHERE子句),它将检索表中所有可以计算的分区,例如:

SELECT COUNT(*) FROM table_name;

陷阱

但是,不建议这样做,因为它需要进行全表扫描,这将查询每个节点,开销非常大,而且会影响集群的性能。
它可能适用于非常小的集群(例如,1到3个节点)和非常小的数据集(例如,几千个分区),但在实践中它可能会超时并且不返回结果。

推荐解决方案

在数据库中计算记录有不同的技术,但最简单的方法是使用DataStax Bulk Loader (DSBulk)。它是开源的,所以可以免费使用。它最初是为批量加载数据到Cassandra集群和从Cassandra集群导出数据而设计的,作为cqlsh COPY命令的可伸缩解决方案。
DSBulk有一个count命令,它提供了与CQL COUNT()函数相同的功能,但它进行了优化,将表扫描分解为小范围查询,因此不会遇到与强力计数相同的问题。
DSBulk使用起来非常简单,只需要几分钟就可以安装好。首先,你需要从DataStax下载中下载二进制文件,然后解压压缩包。详细信息,请参见DSBulk Installation Instructions
一旦你安装了它,你可以用一个命令来计算一个表中的分区:

$ cd path/to/dsbulk_installation
$ bin/dsbulk count -h <node_ip> -k ks_name -t table_name

以下是一些参考资料和示例,可帮助您快速入门:

相关问题