【问题标题】:Cassandra performance on querying fewer or more nodesCassandra 在查询更少或更多节点时的性能
【发布时间】:2021-05-24 21:46:40
【问题描述】:

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

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

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

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

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

当然这里没有非黑即白的选择;一切都必须权衡取舍。

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

【问题讨论】:

标签: cassandra data-modeling


【解决方案1】:

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

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

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

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

为什么会减慢查询速度?

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2014-12-12
    • 2014-07-06
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多