当我在给定的 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 中选择 *”时会发生啥的主要内容,如果未能解决你的问题,请参考以下文章