场景
- 图谱到es中,节点名字做 分词索引。
- 每天刷新数据,不用merge,而是分为 from 和 to 双索引模式, from 在用的时候, 把 to 删除重建。
- 需要rebuild 比较快,让后切换 alias 到新建的索引。
问题。
使用 UpdateRequest, 然后merge 操作。
速度越来越慢这个是可以预见的。
优化
因为是rebuild index,所以不需要用 update 这种merge 的操作。而是直接用 insert。
有一个点,就是保证入图的数据自己的不是重复的。
所以就是用
IndexRequest 代替 updateRequest,速度会提高 5-10倍。
如果觉得还不够,想要利用多线程,可以使用 bulkAsync
public void batchUpdateAysnc(List<IndexRequest> requests, ActionListener listener) throws IOException
{
BulkRequest bulkRequest = new BulkRequest();
requests.forEach(req->bulkRequest.add(req));
highLevelClient.bulkAsync(bulkRequest,RequestOptions.DEFAULT, listener);
}
底层自己io调度,速度还能提高个几倍,做到接近 1w/s 的插入速度是可以的。
网友评论