请教一下关于ES reindex后新的索引size比旧的索引size多了十分之一的大小问题

Elasticsearch | 作者 LZY_lee | 发布于2019年08月28日 | 阅读数:285

我用的ES版本是7.3,节点有三个,所有的索引都是动态映射,没动过,而且我看了下他们两个自动生成的mapping是一样。
旧索引"ukraine"的配置为2个分片没有副本,setting为以下
"ukraine" : {
    "settings" : {
      "index" : {
        "refresh_interval" : "20s",
        "number_of_shards" : "2",
        "provided_name" : "ukraine",
        "merge" : {
          "scheduler" : {
            "max_thread_count" : "1"
          }
        },
        "creation_date" : "1565748461617",
        "unassigned" : {
          "node_left" : {
            "delayed_timeout" : "12h"
          }
        },
        "number_of_replicas" : "0",
        "uuid" : "4at3-BWcQYyOCzyOVUsiyQ",
        "version" : {
          "created" : "7030099"
        }
      }
    }
  },
新索引"ukraine_1"的数据配置为三个分片没有副本,setting为以下
"ukraine_1" : {
    "settings" : {
      "index" : {
        "refresh_interval" : "20s",
        "number_of_shards" : "3",
        "provided_name" : "ukraine_1",
        "creation_date" : "1566913563202",
        "number_of_replicas" : "0",
        "uuid" : "4Gl_efE-SOKmb7Wi9e19vw",
        "version" : {
          "created" : "7030099"
        }
      }
    }
  },
然后使用的reindex命令是
POST _reindex?wait_for_completion=false&refresh
{
  "source": {
    "index": "ukraine"
  },
  "dest": {
    "index": "ukraine_1",
    "type": "bill"
  }
}
图片是插件看到的一个信息,索引现在的一个问题就是为什么配置差不多的情况下,大小差了几个G呢?
TIM图片20190828091313.png
已邀请:

Goun

赞同来自: LZY_lee

原因1:segment数量不同
原因2:ID变了,导致hash到不同的shard中,shard中的倒排索引规则不一定,导致磁盘中存的大小也不一样

God_lockin

赞同来自:

过段时间让他段合并、刷盘之后看看?

laoyang360 - [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

数据量一致存储大小不一致。猜测和分片个数有关系。分片数不一样,分片数多的新索引,分段会多,所以存储会大。

LZY_lee

赞同来自:

图片

LZY_lee

赞同来自:

这个是提问的信息

zhengguo

赞同来自:

很正常的,没必要纠结这个,这个是分片问题,分片的数据量越小整个索引的数据就会越小。至于为什么其实也比较好理解,不用太深入原理。我们只需要知道Elastic的查询最终都是打在分片上面。两个分片的情况下,整个索引的数据被分成两份,基于两份数据index建立倒排索引,也就是倒排索引列表只有两个。三个分片的情况下,整个索引的数据就会被分成三份,基于三份数据index建立倒排索引,也就是倒排索引列表只有三个。三份倒排索引中重复的词语产生的冗余当然比两份倒排索引产生的冗余大很多。而且应该是文档数量越大,冗余越多,数据差距就会越明显,当然Elasticsearch底层会做各种压缩优化,但是这种冗余应该是优化不掉的,这就是分布式,分布式就是把数据分成很多份,但是并不是100分成50和50,而是100可能分成60和60,份数越多就会越大。
举个例子,当然底层应该是远远没有这么简单:
假设一个索引有三个文档,doc1、doc2、doc3  都含有hello这个词
那么如果两个分片
分片1
terms doc1 doc2 doc3
hello 1 1 0

分片2
terms doc1 doc2 doc3
hello 0 0 1
 
三个分片就是
分片1
terms doc1 doc2 doc3
hello 1 0 0

分片2
terms doc1 doc2 doc3
hello 0 1 0

分片3
terms doc1 doc2 doc3
hello 0 0 1

zqc0512 - andy zhou

赞同来自:

segment 
这玩意 数据条目对就行。还在乎这点资源?一般晚上一起操作

要回复问题请先登录注册