有人能解释并提供文件来解释
select * from <keyspace.table>
假设我有5个节点的集群,当发出这样的查询时,cassandradatastax驱动程序是如何工作的(fetchsize设置为500)这是提取数据的正确方法吗?它会导致性能问题吗?
aiqt4smr1#
不,这是一个非常糟糕的数据提取方法。当cassandra至少通过分区键(用于标识保存实际数据的服务器)获取数据时,它会大放异彩。当你在做 select * from table ,请求被发送到协调节点,该节点将需要从所有服务器中提取所有数据并通过协调节点发送,从而使其过载,如果集群中有足够的数据,则很可能导致超时。如果您真的需要从集群执行数据的完全获取,那么最好使用类似spark cassandra connector的方法,它通过令牌范围读取数据,直接从保存数据的节点获取数据,并并行执行。当然,您可以在java驱动程序中实现令牌范围扫描,类似于这样,但是与使用spark相比,您需要做更多的工作。
select * from table
1条答案
按热度按时间aiqt4smr1#
不,这是一个非常糟糕的数据提取方法。当cassandra至少通过分区键(用于标识保存实际数据的服务器)获取数据时,它会大放异彩。当你在做
select * from table
,请求被发送到协调节点,该节点将需要从所有服务器中提取所有数据并通过协调节点发送,从而使其过载,如果集群中有足够的数据,则很可能导致超时。如果您真的需要从集群执行数据的完全获取,那么最好使用类似spark cassandra connector的方法,它通过令牌范围读取数据,直接从保存数据的节点获取数据,并并行执行。当然,您可以在java驱动程序中实现令牌范围扫描,类似于这样,但是与使用spark相比,您需要做更多的工作。