在很多博客文章里都有这样的建议:
在创建索引时先把number_of_replicas设为0,等数据写完之后在动态恢复原来的设置。
对此我有两个问题:
1. 如何等待副本复制完成后再开放检索?
恢复副本数量配置在Java中的具体实现如下:
所以,有什么方式可以同步等待副本复制完成?或者我的担心是否多余?
2. 先创建主分片再复制,具体省去了哪些工作,是副本数据的重复分析吗?还有别的吗?
对比两种方式后发现,这种做法确实会节省不少时间。
在创建索引时先把number_of_replicas设为0,等数据写完之后在动态恢复原来的设置。
对此我有两个问题:
1. 如何等待副本复制完成后再开放检索?
恢复副本数量配置在Java中的具体实现如下:
indicesAdminClient.prepareUpdateSettings(indexName).setSettings(Settings.builder().put("number_of_replicas", 2)).get();
测试后发现,这个调用是立即返回的,不会等待副本复制完成。因为目前创建全量索引后利用了索引别名进行无缝切换,如果副本复制完成前切换别名,担心主分片上的查询压力会比较大,请求很可能要排队等待处理。所以,有什么方式可以同步等待副本复制完成?或者我的担心是否多余?
2. 先创建主分片再复制,具体省去了哪些工作,是副本数据的重复分析吗?还有别的吗?
对比两种方式后发现,这种做法确实会节省不少时间。
1 个回复
medcl - 今晚打老虎。
赞同来自: verra1448
2.先建再产生副本会直接拷贝segment文件,对比文档的直接索引要快的,后续的进来的数据都是各自在副本上进行索引