cassandra - Cassandra 在查询更少或更多节点时的性能
问题描述
考虑越来越多的数据,让我们从两个极端的选择中进行选择:
- 将所有数据均匀分布在集群中的所有节点上
- 我们将它们打包到尽可能少的节点
我更喜欢选项1,因为随着数据量的增长,我们可以把它分散到所有节点上,这样当每个节点被查询时,它的负载最低。
但是,一些资源表明我们不应该查询所有节点,因为这会减慢查询速度。为什么会减慢查询速度?这不就是普通的分散和聚集吗?他们甚至声称这会损害线性可扩展性,因为添加更多节点会进一步拖累查询。(也许我错过了 Cassandra 如何执行查询,一些背景参考表示赞赏)。
相反,一些资源表明我们应该使用选项 2,因为它查询的节点数量最少。
当然,这里没有黑白选择;一切都必须有一个权衡。
我想知道,选项 1 和选项 2 之间的真正区别是什么。另外,关于网络查询,为什么选项 1 会很慢。
解决方案
我更喜欢选项1,因为随着数据量的增长,我们可以将它分散到所有节点上,这样在查询每个节点时,它的负载最低。
你肯定想选择选项#1。这也是可取的,因为新节点或替换节点的传输速度比由更少、密集节点组成的集群要快得多。
但是,一些资源表明我们不应该查询所有节点,因为这会减慢查询速度。
这些资源是绝对正确的。首先,如果您阅读 Alex 在上面发布的资源,您会发现如何构建您的表,以便您的查询可以由单个节点提供服务。运行仅命中单个节点的查询是解决该问题的最佳方法。
为什么会减慢查询速度?
因为在分布式数据库环境中,查询时间变成了网络时间。有很多人喜欢对 Cassandra 运行多键或非绑定查询。发生这种情况时,查询无法找到包含数据的单个节点,Cassandra 会选择一个节点指定为“协调器”。
该节点使用来自其他节点的数据构建结果集。这意味着在一个 30 个节点的集群中,一个节点现在正在从另一个 29 个节点提取数据。假设这些请求没有超时,协调器由于尝试管理太多数据而崩溃的可能性非常高。
底线是,这是 CA 关系数据库和 AP 分区行存储之间的权衡之一。构建您的表以支持您的查询,将一起查询的数据存储在一起,Cassandra 将执行得很好。
推荐阅读
- c++ - 提升 mpi 非阻塞 + 层次聚集
- ios - 自定义 UIView 子类中的 UIButton 不触发动作事件
- c# - 在Unity中达到条件时显示和隐藏游戏对象?
- jquery - 使用 ReactJs jQuery ajax 发布请求下载时 Excel 文件损坏
- java - Timestamp from the client or the server - What's the best practice?
- angular - 有没有办法根据传递给函数的参数来设置 this 变量
- ios - Moya任务中的可选参数
- javascript - 更改处理程序不更新添加对象中的值
- symfony - Doctrine2 不尊重 group by 混合对象/聚合选择
- java - 创建可执行的 bash 脚本,无需用户调用 chmod 命令