在同一数据上有大IS索引或几个小ES索引的pro / con是什么?

时间:2014-12-25 10:50:14

标签: elasticsearch lucene

如果我有1T这样的文件,我想每次查询整个文件

只有 一个大索引(shard = 100) 多个小索引(shard = 100 / index_num)的pro / con是什么 ? 无论如何我会使用100个分片,但是我应该拆分成较小的索引以便分发聚合或其他重要的请求吗?

1 个答案:

答案 0 :(得分:2)

这里有两个你应该理解的概念 -

  1. Sharding - Sharding是我们将数据划分为不同分区并将整个数据的一个分区分配给单独分片的地方。每个分片都可以在任何不同的机器上运行。这样我们就可以将工作委托给不同的机器。假设我们有1000万份文件和10台机器。我们将碎片设置为10并创建索引。当我们完成将这个10百万文档写入此索引时,每百万个文档将转到不同的分片。因此我们将有10个碎片,每个碎片各有一百万个文件。这种架构的优点在于,当您实际搜索文档时,它会在每个分片中发生。在这种情况下,每个碎片都有自己的机器,我们可以同时利用所有10台机器进行搜索,从而在10台机器中实现最高性能。
  2. " 一个具有10个分片的索引与具有一个分片的10个索引相同" - 实际上重要的是分片数量。索引名称只是一个基于分片的抽象构建。即使您对多个索引或单个索引执行搜索,性能也取决于搜索实际执行的分片数。
  3. 通过分片,您可以将搜索和聚合等所有繁重操作分发到各种计算机。如果您确定以后不会有新文档,并且如果您有1T文档并说100台机器,那么最好的方法是创建一个包含100个分片的索引,然后将数据编入索引。

    理想情况下,每台机器的一个分片是最好的方法。

    回答评论

    单个分片本身最大程度地使用并发。因此,在同一台机器上使用多个分片是没有意义的。索引是类似文档的集合。在不同的场景中,它基于不同的逻辑分区,以更好地捕获分布式行为。例如:,假设我将免费订阅者的日志数据存储在仅有2个分片的索引中,但我可能会将付费用户的相同数据存储在具有10个分片的单独索引中。这样付费用户的表现要好得多。因此索引可以作为不同的文档集,具有不同的语义含义。

    因此,为了回答评论,不同的索引是具有不同语义含义的不同信息集。可以看到类似于SQL中的数据库。因此,我可以将我的银行交易信息存储在一个索引中,将我的杂货购买信息存储在另一个索引中。