【发布时间】:2019-10-25 01:58:56
【问题描述】:
我们有一些 elasticsearch 的文档。文档的唯一性是由一些字段共同决定的,java多线程判断是否存在并插入时如何保证唯一性。
之前不知道有什么好方法,所以写了一个方法:我猜如果存在,如果不存在就插入,这个方法是通过syncronized修改的。但我发现这是一种非常低效的做法。
/**
* @param document
*/
synchronized void selectAndInsert(Map<String, Object> document){
//Determine if it exists, insert it if it does not exist
}
我的映射如下: {"properties":{"pt_number":{ "type":"keyword" }, "pt_name":{"type":"keyword" },"pt_longitude":{ "type":"text"},"pt_latitude ":{"type":"text" },"rd_code":{ "type":"text" }, "rd_name":{ "type":"keyword"}, "area_code":{ "type":"关键字"} ...等等}}
唯一性由 area_code、pt_longitude 和 pt_latitude 确定。插入文档时,我会根据area_code、pt-longitude、pt_latitude判断是否存在,不存在则插入。 java多线程运行时如何保证文档的唯一性?
这个问题困扰了我一段时间。谁能帮助我,我将不胜感激。
【问题讨论】:
标签: java elasticsearch concurrency insert unique