当前位置: 首页 > 知识库问答 >
问题:

为什么对一个 Web 应用程序使用多个 ElasticSearch 索引?

谭京
2023-03-14

在提出与将 ES 用于 Web 应用程序有关的问题时,建议为用户配置文件等内容设置一个索引,为数据等设置另一个索引,为日志使用其他几个索引。

将这些都放在一个包含多个 Web 应用程序的集群上,这似乎事情可能会变得混乱或杂乱无章。

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

其次,为什么不为每个应用程序提供一个索引,其中包含日志、用户配置文件、数据等类型?

在 Web 应用程序的索引中使用多个索引而不是多个类型是否有一些好处?

--更新--

除此之外,这个问题中的评论,弹性搜索,多个索引与一个索引以及不同数据集的类型?,似乎没有解释为什么:

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

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

共有1个答案

席宜修
2023-03-14

我找到了创建多个索引的主要原因,这些索引满足了我在 ElasticSearch 的分页文档中对答案的追求:

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

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

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

 类似资料:
  • 问题内容: 我读到每个应用程序都在自己的JVM中运行。为什么会这样呢?他们为什么不让一个JVM运行2个或更多应用程序? 我说的是通过公共静态void main(String [])方法启动的应用程序…) 问题答案: (我假设您正在谈论通过方法启动的应用程序…) 理论上,您可以在JVM中运行多个应用程序。实际上,它们可以以各种方式相互干扰。例如: JVM具有一组System.in/out/err,一

  • 我们使用swisscoms应用云,目前正在评估新的Elasticsearch服务。我们设置了包括logstash和Kibana。 我们现在为每个应用程序添加了一个用户提供的服务,这些应用程序应该使用通用的ElasticSearch/LogStash/Kibana实例。当我们第一次登录kibana时,我们看到有一个名为的索引,所有应用程序的所有日志都在这里。 现在我们想要的是为每一个写到elk实例的

  • 问题内容: 有什么方法可以配置多个工作进程和/或Web进程以在单个Heroku应用程序容器中运行?还是必须将其分解为多个Heroku应用程序? 例如: 问题答案: 所有进程必须具有唯一的名称。 此外,名称 和 无关紧要,没有特殊含义。 唯一带有重要名称的进程是该进程,如Heroku文档中所述: Web进程类型是特殊的,因为它是唯一将从Heroku路由器接收HTTP流量的进程类型。其他过程类型可以任

  • null 这是我第一次尝试将Firebase集成到我的一个项目中,因此一些关于实现这项任务的指导将是非常有用的。 谢了!

  • 我正在Clojure中使用luminus和Ring构建一个web应用程序。我使用lein uberjar构建我的应用程序,然后用undertow服务器构建它。 我的问题是,什么时候对应用程序的请求在单独的非阻塞线程中运行? 我通过对执行的页面执行请求来测试应用程序的并发性。如果我同时在Chrome中的两个选项卡中访问此页面,第二个选项卡将在第一个选项卡加载后大约20秒内才加载。因此,这两次访问似乎

  • 我在Tomcat中部署了多个Web应用程序,并在TOMCAT_HOME/lib/exts中共享service jar。所有的应用程序都使用Spring,在服务罐中我有bean,用Spring 3.1缓存注释注释。我使用Ehache提供商。我想有一个单一的CacheManager使用的所有Web应用程序。如果我在Web应用程序级别定义Spring缓存配置,缓存工作,但为每个应用程序/上下文创建单独的

  • 问题内容: 我想通过JDBC连接到两个不同的Oracle数据库(一个8.0.5.0.0和一个12c)。我确实有两个JDBC驱动程序,它们可以通过简单的“ hello world”应用程序分别成功地连接到相应的DB。下面,我将它们都放在一个Java应用程序中,不幸的是,该应用程序不再起作用(加载了两个驱动程序)。 我已经阅读了这篇文章:从SAMEVENDOR处理多个JDBC驱动程序。提到的选项1可能

  • 我们正在构建一个基于Kinesis/DynamoDB流的服务,我们有一个问题(我们在官方文档中找不到),那就是我们是否可以使用相同的租赁表(DynamoDB)来存储使用相同流的不同KCL应用程序的检查点信息。 是好的练习吗? 它会在行为上产生某种不一致吗? 您是否建议每个KCL应用程序使用单独的租赁表? 非常感谢你。