gpt4 book ai didi

performance - 在Elasticsearch中优化使用简单博客应用程序的类型和路由

转载 作者:行者123 更新时间:2023-12-03 00:26:23 25 4
gpt4 key购买 nike

假设我们有一个简单的博客应用程序,让用户撰写博客发表,并可以在博客中留下评论。我在使用依赖于lucene索引的elasticsearch时从性能 Angular 考虑最佳解决方案。此外,在该示例中,分片的数量设置为5。

如果我将用户,帖子和评论放在单独的索引中,那么当我想显示带有相应评论和用户/作者信息的博客帖子时,elasticsearch最终会以 3x5 = 15分片进行搜索。

另一种可能是使一个索引包含_type用户,帖子和评论。再次显示相同的信息,elasticsearch将不得不搜索 5个分片,因为新的_type并不意味着新的lucene索引(如果我输入错误,请更正我)

现在让我们增加一些复杂性。使用_routing参数:我将使用user_id作为用户的路由,使用博客文章中作者的user_id作为帖子,并使用注释(博客文章的user_id auf作者而不是注释的user_id)。

再次拥有这三个索引后,我们最终将查找 3个分片,因为路由会将所有信息保持在一起。

具有一个具有不同类型的索引,仅在 1个分片中搜索所有信息。

这些假设是否正确,有没有更有效的方法来解决这个问题?使用单碎片解决方案有哪些缺陷?

最佳答案

因此,这是设计数据存储的一般规则。分片可帮助您扩展写入,复制可帮助您扩展读取。

在使用Elasticsearch的情况下,您可以使用routing轻松限制每个搜索请求击中所有碎片。

同样,当您说新的_type并不意味着新的Lucene索引时,您是正确的。新分片意味着新的Lucene索引,该索引存储了属于该分片的所有数据。

您所有的假设都是正确的。特别是如果将来您要查看分布在不同机器上运行的1个以上Elasticsearch节点上的大量碎片时,应该使用routingrouting是一件好事。

恕我直言,最后一个解决方案是使用具有不同类型的1个索引。我认为性能不会受到很大的影响。为了同时搜索用户,博客文章和评论,请使用Multi Search API优化在ES上发出多个请求并立即获得所有结果。

由于blog_postscomments是相关的,并且您可能希望对主题进行相关的搜索,因此您也可以考虑以下设计。使用1个索引,其类型如下:usersblog_postsblog_posts类型将具有用于博客文章的文档,其中带有注释(如nested types)。如果将来可能需要这样做,可以通过仅触发一个请求而不是多个请求(博客帖子1个,评论1个)来帮助您对博客帖子进行多方面的操作。缺点是,如果您允许编辑/删除注释(我认为您会这样做),则每次在Elasticsearch中更新文档时,该文档并不会真正更新,而是会重新建立索引,而旧文档只是标记为已删除。根据您的设置和流量,这可能会或可能不会成为性能问题。但是这些标记为已删除的文档实际上在段合并中被删除。它是你的电话。因此,编写您的应用程序和基准。那是最好的方法。

基本上可以在Elasticsearch内部维护关系(不像RDBMS那样强大,但可以完成工作)。您可能还需要研究Parents/Childrens文档。最后,在managing relations inside Elasticsearch上有一篇很棒的博客文章,对理解如何设计数据存储非常有帮助。

关于performance - 在Elasticsearch中优化使用简单博客应用程序的类型和路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com