【问题标题】:Choosing between MongoDB and ElasticSearch - Scaling/Sharding在 MongoDB 和 ElasticSearch 之间进行选择 - 缩放/分片
【发布时间】:2018-06-08 05:29:33
【问题描述】:

我目前在 MongoDB 和 Elasticsearch 作为日志记录和分析平台的后端之间做出决定。我计划使用由 5 台 Intel Xeon Quad Core 服务器组成的集群,每台服务器配备 64GB RAM 和 500GB NVMe 驱动器。使用 1 个副本集,我猜它应该支持 1TB+ 的数据。

根据我在 Elasticsearch 上阅读的内容,上述服务器的推荐设置为 5-10 个分片,但如果不进行大规模迁移,将来无法增加分片。因此,也许我可以为同一个索引向集群添加 5 个以上的服务器/节点,但不是 10 或 20 个,因为我无法创建更多的分片来分布在新的节点/服务器上 - 对吗?

MongoDB 似乎可以根据键值自动管理分片,并在添加更多节点时重新分配这些分片。那么这是否意味着我将来可以在集群中再添加 50 台服务器,而 MongoDB 会很乐意将这个索引中的数据分布到所有服务器上?

我现在基本上只需要 1TB 的存储空间,但不想让自己陷入困境,如果这 1 个数据集最终增长到 100TB。

如果不在一开始就使用 100 个分片启动 Elasticsearch,这似乎是低效和不好的做法,如何才能将这个单一数据集扩展到超过 5/10 个服务器?

【问题讨论】:

  • 如果您使用基于时间的索引,则无需立即为 1TB 负载调整索引大小。如果第一天/周/月(无论您选择什么时间增量),您只有 X GB 的数据,然后相应地调整大小,并且对于下一个时间增量,您可以增加分片的数量。我就是这样处理这种情况的。不过,您的问题中有太多未知数,无法冒险研究真实数字。

标签: mongodb elasticsearch scaling


【解决方案1】:
  1. 正如 Val 所说,您通常会有基于时间的索引,因此您可以轻松(以高效的方式)在特定保留期后删除数据。因此,随着您的需求随时间变化,您可以更改分片编号(通常通过索引模板)。
  2. 当前版本的 Elasticsearch 现在支持 _split API,这正是您所要求的:最初使用 5 个分片,但可以选择高达 20 的任何因子(仅作为示例) - 所以 5 - > 10 -> 30 是选项。
  3. 如果您有 5 个主分片且复制因子为 1,您仍然可以将负载分散到 10 个节点上:写入 5 个主分片和 5 个副本分片;读取将转到其中任何一个。 Elasticsearch 的写入/读取模型通常与 MongoDB 不同。

PS 免责声明:我现在为 Elastic 工作,但我在生产环境中使用 MongoDB 也有 5 年了。

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2014-10-31
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2010-12-06
    • 2012-04-13
    • 2013-06-06
    相关资源
    最近更新 更多