performance - 大单片 vs 多片
问题描述
ElasticSearch 分片有两个最佳实践:
- 每个节点的最佳分片数为 1。
- 分片大小最多应为 50 GB。
就我而言,它们有些争议。更具体地说,假设索引大小为 2 TB,并且有 10 个节点。我应该配置多少个分片:
选项 1:10 个分片,每个分片 200GB
或者
选项 2:40 个分片,每个分片 50GB
查询延迟性能哪个更好?
解决方案
任何被认为是“最优”的东西通常只是理论上的最优,在实践中你需要做出一些权衡。大多数时候,您肯定希望每个主分片至少有一个副本(容错),因此每个节点至少有 2 个分片(除非您有 5 个主分片 @ 每个 400GB)。这么多的最优性,让我们脚踏实地......
你没有提到每个节点的堆数量,但由于你不应该超过每个节点 30.5GB 的堆限制,你应该清楚地倾向于拥有最多约 50GB 数据的分片。50 个分片 @40GB 也可以。
我不会尝试 200GB 分片,因为那可能太大了。我也不会尝试拥有 1000 个 2GB 分片,因为分片太多。
最终,这取决于您的用例和硬件。您的索引是否正在承受繁重的搜索负载,还是主要处理索引请求?您的集群需要处理多少并发搜索/索引请求?知道的最好方法是测试所有这些,但如果没有更多信息,第二个选项显然比第一个更好。并且不要忘记每个主分片也可能需要一个副本,这将使您的存储需求翻倍(即每个节点 400GB)
推荐阅读
- c - 如何在 x86 架构上从 C 调用汇编函数?
- sql - SQL 按具有最新日期的列分组
- django - 无法更新 Django Rest 框架中的字段
- python - Python:使用相同键合并两个字典的最优雅方法
- c++ - C++ 整数数组转换和操作
- actions-on-google - 如何允许 Google Assistant Action 在 Chromecast 上显示信息?
- c# - Timespan.FromHours 用于十进制转换
- c++ - 如何将 ac/c++ 变量写入 shell 脚本?
- git - 我已经使用 git commit 和 git add 提交了一些项目文件。命令,但我的文件未显示在 git 存储库中
- mysql - 我不能将外键分配给不是另一个表的主表吗?