otion20122 2018-07-16 12:42 采纳率: 0%
浏览 4447
已结题

es查询很慢,求优化方法

集群现在5个master、3个client、8个data,master和client都是16核cpu、data是8核cpu,都开了超线程,内存都128G,jvm内存xms和xmx都设置30G。elasticsearch.yml见elasticsearch.yml
索引按小时分表,每个索引是5千万-1.2亿条记录,每条记录30个字段。索引会预先建立好mapping,语句如下:
curl -XPUT "http://node1:9200/transcode_2018071401" -d '{"settings" : {"number_of_shards" : 5,"number_of_replicas" : 1, "index.refresh_interval":"30s","index.translog.sync_interval":"5s","index.translog.flush_threshold_size":"4096mb", "index.translog.durability": "async","index.unassigned.node_left.delayed_timeout":"5m"},"aliases":{"transcode_20180714":{},"transcode_201807":{}},"mappings":{"data":{"properties":{"time":{"type":"integer"},"pkgCount":{"type":"integer"},"bytesNum":{"type":"integer"},"stream_id":{"type":"keyword","norms": false}}}}}' -H "Content-type:application/json"

用java程序多线程并行插入数据,插入时指定了routing,值为stream_id字段的值,每秒大概2.5w条数据。

现在需要查询某个时间段内,按照字段stream_id和ip字段的int_ip(ip为struct结构)的值过滤,返回大量的数据(因为前端要用折线图展示,得一下子返回全量数据),查最近两三个小时的数,大概有10000条吧。

目前的处理方式是,在代码里,根据时间段,找到对应的几个小时索引,然后一个索引一个请求 curl node1:9200/_search/ xxx ,多个请求同时发出,并行查询,再对返回的多个结果进行汇总。查询的时候按stream_id字段值路由,请求语句如下:
curl "http://node1:9200/transcode_20 ... ot%3B -X GET -H "Content-type:application/json" -d '{"size":"1001","query":{"bool":{"filter":{"bool":{"must":[{"term":{"stream_id":"jcd9734d813ad"}},{"term":{"ip.int_ip":-776921847}},{"range":{"time":{"from":1531647004,"to":null}}}]}}}},"_source":{"includes":["ip","time","pkgCount","bytesNum"]},"sort":[{"_doc":{"order":"asc"}}]}'
第一次拉取,返回的数据都是几百条的情况下,耗时慢的要十几秒,快的几百毫秒

然后拿到一批返回的_scroll_id,
同样对这批_scroll_id并行使用:
curl "http://node1:9200/_search/scroll" -X GET -H "Content-type:application/json" -d \'{"scroll":"30s","scroll_id":"'.$scrollId.'"}\''
查询,再对返回的_scroll_id并行查询,直到拉完数据。
这步的速度也不稳定,一次拉取有的时候只要几百毫秒,有的时候要一两秒。

跪求优化建议

  • 写回答

2条回答 默认 最新

  • 小优子我喜欢你 2018-07-16 13:01
    关注

    增加备份数量,可以增加查询速度

    评论

报告相同问题?

悬赏问题

  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿