当我在给定的 Cassandra 集群中“从 ColumnFamily 中选择 *”时会发生啥

Posted

技术标签:

【中文标题】当我在给定的 Cassandra 集群中“从 ColumnFamily 中选择 *”时会发生啥【英文标题】:What happens when I "select * from ColumnFamily" in a given Cassandra Cluster当我在给定的 Cassandra 集群中“从 ColumnFamily 中选择 *”时会发生什么 【发布时间】:2019-12-23 08:00:42 【问题描述】:

有人可以解释并提供解释

行为的文件吗
select * from <keyspace.table>

假设我有 5 个节点的集群,当发出此类查询时,Cassandra DataStax 驱动程序的行为如何? (Fetchsize 设置为 500)

这是提取数据的正确方法吗?它会导致任何性能问题吗?

【问题讨论】:

【参考方案1】:

不,这确实是一种非常糟糕的数据提取方式。当 Cassandra 至少通过分区键(标识保存实际数据的服务器)获取数据时,它会大放异彩。当您执行select * from table 时,请求被发送到协调节点,这将需要从所有服务器中提取所有数据并通过该协调节点发送,使其过载,如果您有足够的数据,很可能会导致超时集群。

如果您确实需要从集群中执行完整的数据提取,最好使用类似Spark Cassandra Connector 的东西,它按令牌范围读取数据,直接从持有数据的节点中提取数据,并并行执行此操作.您当然可以在 Java 驱动程序something like this 中实现令牌范围扫描,但与使用 Spark 相比,您需要做更多的工作。

【讨论】:

以上是关于当我在给定的 Cassandra 集群中“从 ColumnFamily 中选择 *”时会发生啥的主要内容,如果未能解决你的问题,请参考以下文章

从 c#datastax 驱动程序关闭 cassandra 集群时出错

将节点添加到 Cassandra 集群

Cassandra 集群重启后没有恢复?

在 Cassandra 中将数据从一个集群传输到另一个集群

cassandra 集群名称不匹配的异常

Cassandra - 开发中心无法连接到 Cassandra 集群的所有 3 个节点