作为文档的一部分,我遇到了以下内容
In Elasticsearch the key to good performance is to de-normalize your data into documents
而且,
the restriction about, where both the child and parent documents must be on the same shard
给定一个多级层次结构的场景(祖父母-->父母-->子女),其中一些父母比其他父母有更多的子女,并且数据可能是倾斜的,很少有碎片包含比其他碎片更大的指数数据。
在获得更高绩效方面,最佳做法是什么?
将所有层次结构放在一个文档中(而不是每个级别一个文档)是一个好主意吗。如果父级数据需要复制到所有文档中,那么父级数据可能会被冗余,因为有更多的子级?
1条答案
按热度按时间dm7nw8vv1#
是的,您提到的两个陈述都是正确的,让我在您的用例上下文中回答您的两个问题。
将所有层次结构放在一个文档中(而不是每个级别一个文档)是一个好主意吗。如果需要将父数据复制到所有文档中,那么父数据可能是多余的,因为子数据更多?
答:一般来说,如果您在一个文档中搜索所有数据,搜索速度肯定会快得多,这就是第一条语句中提到的数据库中数据非规范化的全部原因,因为您不必创建多个worker线程并合并来自多个文档/碎片/节点的结果。另外,存储成本低廉,虽然可以节省存储成本,但可以节省计算成本(比存储成本更高)。简言之,如果您担心查询性能,那么对数据进行非规范化将大大提高数据的性能。
在获得更高性能方面,最佳做法是什么?
答:如果您仍然继续使用规范化方法,那么正如前面提到的,您应该将所有相关文档保持在同一个shard中,并且应该实现自定义路由来实现这一点。