我的Elasticsearch硬件配置有3个节点:
- 2个具有64GB RAM(其中30GB用于JVM),3TB HDD,每个8核的数据,主,接收节点;
- 1个具有8GB RAM,500GB HDD,2个内核的主节点+协调节点。
我的数据是:
- ≈50亿个文档,目前占用≈1.5-2TB的磁盘空间(一年将增长到10TB);
- 复杂的结构,带有很多嵌套文档(包含在父文档中),文档中的字段也完全没有标准(并且不可能),因此索引映射很大;
- 数据不是超时的(例如日志);
我需要能够在这些文档中的任何字段上进行搜索,搜索仅通过String Query API对所有文档执行。另外,在搜索过程中,我使用 sort , highlighting , total_hits_count 和术语汇总。
我个人尝试过两次存储pr的尝试:
- 1个具有16个分片的索引-导致索引时间长,但搜索速度快。另外,节点经常崩溃,原因是(我认为)映射太大,并且节点上的RAM始终使用95-99。
- 16个索引(每个索引带1个分片),并分配了别名-索引阶段执行得更快,但是搜索变得慢得多。 这是当前版本。
我不明白为什么在1x16上搜索比16x1快很多...
那么最后,根据提供的信息,将数据存储在ES中的最佳方法是什么?
当建议将碎片大小保持在20-50GB时,每个碎片目前的重量也为75-128GB,但是我看到了一些意见和建议,每个内核保留1个碎片。因此,也欢迎对此配置发表意见。