0

我的 Elasticsearch 硬件配置有 3 个节点:

  • 2 x 数据、主、摄取节点,64GB RAM(其中 30GB 用于 JVM),3TB 硬盘,每个 8 核;
  • 1 个主节点 + 协调节点,具有 8GB RAM、500GB HDD、2 个内核。

我的数据是:

  • ≈ 50 亿个文档,目前占用 ≈ 1.5-2TB 的磁盘空间(一年内将增长到 10TB);
  • 结构复杂,有很多嵌套文档(包含在父文档中),文档中的字段也根本没有标准化(也不能标准化),因此索引映射很大;
  • 数据不超时(如日志);

我需要能够搜索这些文档中的任何字段,仅通过 String Query API 对所有文档执行搜索。同样在搜索过程中,我使用sorthighlightingtotal_hits_countterms aggregation

就个人而言,我尝试了两次存储 pr 的尝试:

  • 1 个具有 16 个分片的索引- 这导致索引时间长,但搜索速度快。节点也经常崩溃,因为(我认为)映射太大,我总是在节点上使用大约 95-99 的 RAM。
  • 16 个索引,每个索引有 1 个分片,分配别名 - 索引阶段执行得更快,但是搜索变得慢了很多。这是当前版本。

我不明白为什么 1x16 上的搜索比 16x1 快很多...


那么最后,根据提供的信息,将这些数据存储在 ES 中的最佳方法是什么?

此外,目前每个分片的重量为 75-128GB,建议将分片大小保持在 20-50GB,但我看到意见和建议是每个核心保留 1 个分片。因此,也欢迎对该配置提出意见。

4

0 回答 0