elasticsearch,Indexing,elasticsearch" /> elasticsearch,Indexing,elasticsearch" />

Indexing 弹性搜索最佳索引大小

Indexing 弹性搜索最佳索引大小,indexing,elasticsearch,Indexing,elasticsearch,我有一个3节点的集群,每个节点都有4g大小的ES_堆。当索引大小在4GB左右时,没有问题,但当索引大小超过10GB时,通常会出现Java堆空间异常和不可用碎片异常。当我减小索引大小时,问题就消失了。所以我的问题是,;这样一个3节点elasticsearch集群的最佳索引大小是多少?关于“x节点集群的最佳索引大小是多少”的问题取决于以下几点: 你们商店里的文档平均有多大 你的查询是什么样子的,你做了很多刻面/排序吗 每台机器的总内存是多少?这些节点是在不同的机器上还是在同一台机器上 为数据编制索引

我有一个3节点的集群,每个节点都有4g大小的ES_堆。当索引大小在4GB左右时,没有问题,但当索引大小超过10GB时,通常会出现Java堆空间异常和不可用碎片异常。当我减小索引大小时,问题就消失了。所以我的问题是,;这样一个3节点elasticsearch集群的最佳索引大小是多少?

关于“x节点集群的最佳索引大小是多少”的问题取决于以下几点:

  • 你们商店里的文档平均有多大

  • 你的查询是什么样子的,你做了很多刻面/排序吗

  • 每台机器的总内存是多少?这些节点是在不同的机器上还是在同一台机器上

  • 为数据编制索引时,是否存储=真集?(你不应该)

  • 您是否在做其他事情,比如父/子文档或嵌套文档,这些都是内存密集型的

  • 你是重索引还是轻索引

  • 您商店中的文档总数是多少

  • 在您的案例中,这与索引大小无关,而更重要的是为您的案例分配适当的内存量。此外,我认为您可以根据当前的使用和存储模式找到自己的最佳大小,而无需真正询问

    这就是说,上面列出的项目只是我脑子里想不到的一些事情,当您试图衡量应该分配给JVM多少内存时,应该使用这些东西

    一般来说,您应该始终将至少50%的内存留给操作系统,并且永远不要超过32GB(我从来没有超过29GB)。除此之外,我不会说有硬性规定。在您的情况下,您可能会发现有分配更多的空间,或者您可能会发现您分配了太多

    例如,假设您有一个刻面的字段,该字段是一个长数组

    假设最长的数组有300个成员,您正在浏览200万个文档。JVM将分配第一个300*2000000*8(java长度为8字节)。如果该空间量超过JVM大小,则每次都会得到一个OOM

    这里的解决方案是A.)创建第四个节点B.)分配更多内存C.)重新考虑索引/存储策略或D.)重新考虑刻面策略

    例如,也许你只需要一个短的或一个int就可以了。也许你不需要所有的300个成员,但你真的只关心三个方面。只存储这三个字段,300个字段的长列表将转到另一个字段(您永远不会反对)

    通常,该策略依赖于用例,需要对如何使用搜索集群进行一些思考和预测。elasticsearch最大的优点之一是,您可以在大约五分钟内启动并运行,但我发现这导致了一种错觉,即elasticsearch可以管理一切。它管理了很多,但这仍然不能免除良好的系统管理