首页 > 解决方案 > Cassandra 在查询更少或更多节点时的性能

问题描述

考虑越来越多的数据,让我们从两个极端的选择中进行选择:

  1. 将所有数据均匀分布在集群中的所有节点上
  2. 我们将它们打包到尽可能少的节点

我更喜欢选项1,因为随着数据量的增长,我们可以把它分散到所有节点上,这样当每个节点被查询时,它的负载最低。

但是,一些资源表明我们不应该查询所有节点,因为这会减慢查询速度。为什么会减慢查询速度?这不就是普通的分散和聚集吗?他们甚至声称这会损害线性可扩展性,因为添加更多节点会进一步拖累查询。(也许我错过了 Cassandra 如何执行查询,一些背景参考表示赞赏)。

相反,一些资源表明我们应该使用选项 2,因为它查询的节点数量最少。

当然,这里没有黑白选择;一切都必须有一个权衡。

我想知道,选项 1 和选项 2 之间的真正区别是什么。另外,关于网络查询,为什么选项 1 会很慢。

标签: cassandradata-modeling

解决方案


我更喜欢选项1,因为随着数据量的增长,我们可以将它分散到所有节点上,这样在查询每个节点时,它的负载最低。

你肯定想选择选项#1。这也是可取的,因为新节点或替换节点的传输速度比由更少、密集节点组成的集群要快得多。

但是,一些资源表明我们不应该查询所有节点,因为这会减慢查询速度。

这些资源是绝对正确的。首先,如果您阅读 Alex 在上面发布的资源,您会发现如何构建您的表,以便您的查询可以由单个节点提供服务。运行仅命中单个节点的查询是解决该问题的最佳方法。

为什么会减慢查询速度?

因为在分布式数据库环境中,查询时间变成了网络时间。有很多人喜欢对 Cassandra 运行多键或非绑定查询。发生这种情况时,查询无法找到包含数据的单个节点,Cassandra 会选择一个节点指定为“协调器”。

该节点使用来自其他节点的数据构建结果集。这意味着在一个 30 个节点的集群中,一个节点现在正在从另一个 29 个节点提取数据。假设这些请求没有超时,协调器由于尝试管理太多数据而崩溃的可能性非常高。

底线是,这是 CA 关系数据库和 AP 分区行存储之间的权衡之一。构建您的表以支持您的查询,将一起查询的数据存储在一起,Cassandra 将执行得很好。


推荐阅读