在MongoDB和ElasticSearch之间进行选择 - 缩放/分片



我目前正在决定在MongoDB和Elasticsearch之间作为日志记录和分析平台的后端。我计划使用一个由 5 台英特尔至强四核服务器组成的集群,每台服务器配备 64GB RAM 和 500GB NVMe 驱动器。有了 1 个副本集,它应该支持 1TB+ 的数据,我猜。

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

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

我现在基本上只需要 1TB 的存储空间,但如果这 1 个数据集最终增长到 100TB,我不想把自己画到角落里。

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

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

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

最新更新