【问题标题】:Why use multiple ElasticSearch indices for one web application?为什么要为一个 Web 应用程序使用多个 ElasticSearch 索引?
【发布时间】:2015-11-01 11:38:39
【问题描述】:

在询问有关将 ES 用于 Web 应用程序的问题时,建议使用一个索引用于用户配置文件、另一个数据索引等,以及其他几个用于日志的索引。

将所有这些都放在具有多个 Web 应用程序的集群上,这似乎会使事情变得混乱或杂乱无章。

在这种情况下,人们是否每个应用程序使用一个集群?我有点困惑,因为当我阅读有关索引日志的文章时,它们似乎是指将数据存储在多个索引中,而不是索引中的类型。

其次,为什么不为每个应用创建一个索引,包括日志、用户配置文件、数据等类型?

在 Web 应用程序的索引中使用多个索引而不是多个类型有什么好处吗?

-- 更新--

此外,这个问题中的 cmets Elastic search, multiple indexes vs one index and types for different data sets? 在解释原因方面似乎还不够:

数据保留:对于应用程序日志/指标数据,使用不同的索引 如果您需要不同的保留期限

是否建议这样做,因为删除整个索引而不是索引中的类型更简单?是否与数据的存储方式以及删除数据后空间恢复的方式有关?

【问题讨论】:

  • 这是基于意见/过于宽泛。
  • 我宁愿听到好的意见,专业人士,而不是许多建筑师认为实际上是好的坏意见。与其投反对票,也不要提供任何建设性的东西,也许你会建议一种更好的方式来提出对社区更有益的问题。
  • 最好使用许多不同的索引,每个索引都包含自己的类型,而不是一个索引包含多种类型。 根据经验,当您在一个索引中有两个类型具有相同名称的属性时,该属性的类型必须与该属性所在的每个类型相同。如果不是,如果我没记错的话,Elasticsearch 会抛出异常。将类型索引到同一集群上的不同索引中将避免出现这种情况。
  • @RussCam - 我相信你所指的问题可以在这里找到:elastic.co/guide/en/elasticsearch/guide/current/mapping.html - We can avoid this problem either by naming the fields differently—for example, title_en and title_es—or by explicitly including the type name in the field name and querying each field separately

标签: indexing elasticsearch


【解决方案1】:

我在ElasticSearch's pagination documentation 中找到了创建多个索引以满足我对答案的追求的主要原因:

要了解为什么深度分页会出现问题,让我们假设我们 正在使用五个主分片的单个索引中进行搜索。什么时候我们 请求结果的第一页(结果 1 到 10),每个分片 生成自己的前 10 个结果并将它们返回给请求者 节点,然后对所有 50 个结果进行排序以选择整体 前 10 名。

现在假设我们要求第 1,000 页 - 结果 10,001 到 10,010。 一切都以相同的方式工作,除了每个分片必须产生 它的前 10,010 个结果。然后请求节点对所有 50,050 个结果并丢弃其中的 50,040 个!

您可以看到,在分布式系统中,排序结果的成本 我们页面越深入,它就会呈指数增长。有一个很好的理由 网络搜索引擎不会为任何查询返回超过 1,000 个结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多