三人行必有我师

_id 批量查询效率问题

Elasticsearch | 作者 puyunjiafly | 发布于2017年11月15日 | 阅读数:5590

看文档_id 和 _uid都是存储在 _all字段里面 
现在环境大致这样:
3台es集群,每台12G
索引5个 每个索引大致2亿条数据,200G储存
其中一个索引里面_id指定为需求特定字段,
现在根据_id 用mget 或者 ids查询都很慢
mget 要快些。
有什么办法能优化 这种情况 _id的批量查询呢?
大佬有什么建议都可以指出,我这边测试结果会在评论里面详细列出
感谢 
已邀请:

puyunjiafly

赞同来自:

测试方法:
执行该索引
{
  "sort": [
    {
      "_uid": {
        "order": "desc"
      }
    }
  ]
}
 
然后执行ids查询 效率很高 
 
请教:这种方式是将uid导入内存,索引查询效率提高导致的吗?
这种数据量大后是不是会对jvm造成很大消耗

Marquezzzz

赞同来自:

为了提高排序效率,ElasticSearch 会将所有字段的值加载到内存中,这就叫做"数据字段(fielddata)",对jvm会造成很大消耗。

puyunjiafly

赞同来自:

暂时没人回复,测试结果如下。
1:es版本5.2
2:将_uid(fielddata) sort 统一加载到内存
3:不改变indices.fielddata.cache.size大小,此数据一直保存到内存满足需求。
4:数据大小2E 查询效率  1000个_id/20多毫秒
 
缺点:太吃内存,根据功能需求,打算将该索引分片单独分配到一台机器提供该功能。

诗兄

赞同来自:

遇到类似问题,我有个业务大量判断_id 对应的value是否存在es里面, es单个索引数据量1亿多条。   楼主找到什么更好的解决方法没

要回复问题请先登录注册