Cassandra 查询语言(CQL):我们可以结合 SELECT * FROM table_name;和 SELECT count(*) 来自 table_name;
Cassandra query language(CQL): Can we combine SELECT * FROM table_name; and SELECT count(*) FROM table_name;
我想知道我们是否可以在 CQL 中将 'Select *
' 和 'Select count(*)
' 查询组合在一起,如果可以,那么性能如何,它是否提高了查询的执行性能比 运行 对大型数据集的 2 个单独查询。
简答 - 不,您不能合并这两个查询。
更长的答案 - 不要那样做。在大型数据集上,您的查询很可能会超时,因为 Cassandra 需要遍历所有机器上的所有数据。这将导致协调器节点的负载增加,并可能导致其崩溃。如果您需要获取所有数据,您需要使用另一种方法:
- 使用针对此类任务进行了大量优化的 Spark Cassandra Connector
- 如果你想卸载数据,或者只是计算,你可以使用 DSBulk utility
- 如果您仍然需要从代码中执行此操作,则需要执行所谓的令牌范围扫描 - Spark Cassandra Connector 和 DSBulk 使用的技术。您可以自己实现(这里是 an example for Java driver 3.x),或者对于 Java 使用 DSBulk 的 API - 这些罐子可以通过 Maven 获得(我没有那个例子)
我想知道我们是否可以在 CQL 中将 'Select *
' 和 'Select count(*)
' 查询组合在一起,如果可以,那么性能如何,它是否提高了查询的执行性能比 运行 对大型数据集的 2 个单独查询。
简答 - 不,您不能合并这两个查询。
更长的答案 - 不要那样做。在大型数据集上,您的查询很可能会超时,因为 Cassandra 需要遍历所有机器上的所有数据。这将导致协调器节点的负载增加,并可能导致其崩溃。如果您需要获取所有数据,您需要使用另一种方法:
- 使用针对此类任务进行了大量优化的 Spark Cassandra Connector
- 如果你想卸载数据,或者只是计算,你可以使用 DSBulk utility
- 如果您仍然需要从代码中执行此操作,则需要执行所谓的令牌范围扫描 - Spark Cassandra Connector 和 DSBulk 使用的技术。您可以自己实现(这里是 an example for Java driver 3.x),或者对于 Java 使用 DSBulk 的 API - 这些罐子可以通过 Maven 获得(我没有那个例子)