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

Indexing ElasticSearch类型和索引性能

Indexing ElasticSearch类型和索引性能,indexing,elasticsearch,Indexing,elasticsearch,我想了解将多种类型的文档索引到单个索引的性能影响,其中每种类型的项目数量不平衡(一种类型有数百万个,而另一种类型只有数千个文档)。我发现了一些索引上的问题,排除类型是否在单个索引中单独索引(或不单独索引)将有助于我。我是否可以假设类型是沿着关系数据库的行单独索引的,其中每个表实际上是分开的 如果上面的答案是否定的,并且所有类型都有效地集中在一起,那么我将列出我正在做的其他工作,以尝试获得更详细的输入 本例的用例是为Twitter用户捕获推文(为清晰起见,称其为所有者)。我有一个多租户环境,每个t

我想了解将多种类型的文档索引到单个索引的性能影响,其中每种类型的项目数量不平衡(一种类型有数百万个,而另一种类型只有数千个文档)。我发现了一些索引上的问题,排除类型是否在单个索引中单独索引(或不单独索引)将有助于我。我是否可以假设类型是沿着关系数据库的行单独索引的,其中每个表实际上是分开的

如果上面的答案是否定的,并且所有类型都有效地集中在一起,那么我将列出我正在做的其他工作,以尝试获得更详细的输入

本例的用例是为Twitter用户捕获推文(为清晰起见,称其为所有者)。我有一个多租户环境,每个twitter所有者有一个索引。也就是说,关注单一所有者:

  • 我将每个时间线(提及、直接消息、我的推文和完整的“主页”时间线)中的推文捕获到一个索引中,每个时间线类型在ElasticSearch中具有不同的映射
  • 每个tweet都引用一个父类型,即使用父映射编写tweet的用户(可能是所有者,也可能不是所有者)。所有时间线类型只有一个“用户”类型
  • 我在一个查询中只对一个所有者进行搜索和刻面,所以我不必担心自己在多个索引中搜索
  • 主页时间线可能会捕获数百万条推文,而所有者自己的推文可能会产生数百条或数千条
  • 用户文档通常使用Twitter时间线之外的信息进行更新,因此我希望避免(如果可能的话)必须在多个索引中保持同一用户对象的多个副本同步的情况
我注意到,查询包含数百万文档的索引时,响应速度要慢得多,即使排除包含数百万文档的“主时间轴”类型,只留下包含数千个条目的类型也是如此。由于tweet和用户之间的父子关系,我不想将类型拆分为单独的索引(除非我必须这样做)

我是否有办法理解问题是否与特定索引中的文档总数有关,是否与“has_child”过滤查询的操作有关,是否与查询或方面的其他糟糕设计有关,或者其他问题

如有任何意见,将不胜感激

编辑

澄清tweet是按时间线存储的说法。这意味着有一个ElasticSearch类型为home_timeline、my_tweets_timeline、References_timeline、direct_messages_timeline等定义,它对应于您在标准twitter.com UI中看到的内容。因此,这两组tweet之间有一个自然的分离,尽管也有一些重叠

我回去查看has_child查询,这在这一点上是一个明确的转移注意力的问题。即使查询只有几千行的类型(my_tweets_timeline),对较大索引的基本查询也要慢得多

我是否可以假设类型是沿着关系数据库的行单独索引的,其中每个表实际上是分开的

不,正如您所猜测的,所有类型都集中到一个索引中

我是否有办法理解问题是否与特定索引中的文档总数有关,是否与“has_child”过滤查询的操作有关,是否与查询或方面的其他糟糕设计有关,或者其他问题

索引中的文档总数显然是一个因素。另一个问题是
has_child
查询是否特别慢-例如,尝试将
has_child
查询的性能与普通的
术语
查询进行比较。在“记忆注意事项”下提供了一条线索:

在当前的实现中,所有的
\u id
值都加载到内存(heap)中,以支持快速查找,因此请确保有足够的内存

这意味着在有数百万潜在子对象的情况下,任何
has_child
查询都需要大量内存。确保足够的内存可用于此类操作,或考虑重新设计,以消除对<代码> HaseSoovi< /C>的需求。 我是否可以假设类型是沿着关系数据库的行单独索引的,其中每个表实际上是分开的

不,正如您所猜测的,所有类型都集中到一个索引中

我是否有办法理解问题是否与特定索引中的文档总数有关,是否与“has_child”过滤查询的操作有关,是否与查询或方面的其他糟糕设计有关,或者其他问题

索引中的文档总数显然是一个因素。另一个问题是
has_child
查询是否特别慢-例如,尝试将
has_child
查询的性能与普通的
术语
查询进行比较。在“记忆注意事项”下提供了一条线索:

在当前的实现中,所有的
\u id
值都加载到内存(heap)中,以支持快速查找,因此请确保有足够的内存


这意味着在有数百万潜在子对象的情况下,任何
has_child
查询都需要大量内存。确保足够的内存用于这些操作,或者考虑重新设计,以消除对<代码> HaseSoovi的需求。

我的答案感觉不完整,但你的问题也是如此:请提供你使用的<代码> HasyScript < /代码>查询,以及它们之间关系的不同文档的例子。特别是,我不确定你所说的“排除‘主页时间线’类型”是什么意思——我只知道tweet和用户类型,这让我感到困惑