最近需要离线导入一批10亿左右的索引数据,通过bluk接口导入。
根据之前大批量数据导入的经验,如果是自定义的索引id,会在索引达到一定量的时候,导入性能急剧下降,这是由于所有插入的索引都会进行是否重复的检查(等一系列其他操作),这个检查在索引量巨大的时候,重复检查这个操作的消耗就非常可观了,因此之前的处理方式是将索引id设置为系统自动生成,但是这个方式算是一个治标不治本的方法。
有没有一种方式,或者什么配置,当能够确认导入数据索引是唯一的时候,可以直接插入,从而避免系统这种开销。
根据之前大批量数据导入的经验,如果是自定义的索引id,会在索引达到一定量的时候,导入性能急剧下降,这是由于所有插入的索引都会进行是否重复的检查(等一系列其他操作),这个检查在索引量巨大的时候,重复检查这个操作的消耗就非常可观了,因此之前的处理方式是将索引id设置为系统自动生成,但是这个方式算是一个治标不治本的方法。
有没有一种方式,或者什么配置,当能够确认导入数据索引是唯一的时候,可以直接插入,从而避免系统这种开销。
3 个回复
zhengtong0898
赞同来自: kennywu76
不知道bulk的时候声明op_type是create时, 是否也会做非常多的检查.. 但至少原文档是不会覆盖, version不会+1, 而是针对这个id返回一个409错误状态码(表示文档已存在, 这也许也是做了检查判断的).
这是我测试的代码.(python)
输出结果:
rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk
赞同来自: zzz
https://elasticsearch.cn/article/285
你bulk的时候用的create、index还是update ????其实 create和index的性能消耗是类似的,update最大。
白衬衣 - 金桥
赞同来自:
举个例子,你把10亿条数据分成10个1亿行的数据,写入10个index,然后10个index写完之后,全部reindex到一个索引里面,不知道方法是否可行。