es 过亿数据查询咨询

查看 274|回复 29
作者:seedhk   
前提:
1 亿左右的数据,数据来源是设备的轨迹数据(gps ,速度,温度等信息),设备端按 5s 左右一次上报
查询需求:
[ol]
  • 能支持查询 3 400 台设备的最新轨迹数据
  • 查询单个设备的轨迹信息(这个简单)
    [/ol]
    我自己尝试搭建了 3 个节点的 es ,每个节点 4g 左右内存,发现执行需求 1 时,大概需要 2-5s 左右,查询语句:
    curl -X GET "http://192.168.1.210:9200/test_index/_search?pretty" \
    -H 'Content-Type: application/json' \
    -d '{
      "query": {
        "terms": {
          "serialNumber": [省略 sn]
        }
      },
      "collapse": {
        "field": "serialNumber"
      },
      "size": 300
    }'
    mapping 信息:
    {
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1,
        "index": {
          "sort.field": "createTime",
          "sort.order": "desc"
        }
      },
      "mappings": {
        "properties": {
          "serialNumber": {
            "type": "keyword"
          },
          "createTime": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss"
          },
          "longitude": {
            "type": "double"
          },
          "latitude": {
            "type": "double"
          }
        }
      }
    }
    请问可以做到需求 1 查询 3-400 台设备,耗时到 1s 左右吗?

    轨迹, 查询, 性能

  • dode   
    都是时序数据,查的时候,限制数据在最新二十分钟内,应该就可以命中缓存了吧
    tf2   
    无脑建议 "number_of_shards": 10 先试试。
    ca2oh4   
    那应该用时序数据库可能更合适一下吧
    ca2oh4   
    另外 4GB 内存对于 ES 来说有点少,建议一个节点至少 64GB
    luciankaltz   
    都是时序数据,为什么不放时序数据库呢
    还是你要对着某个文本字段做全文索引?
    ca2oh4   
    如果内存紧张,多节点不如单节点
    seedhk
    OP
      
    @dode 因为可能会有部分设备很久没有上报,也需要展示这些数据,所以没法加时间范围限制
    seedhk
    OP
      
    @tf2 加到这么多分片会更快吗?
    seedhk
    OP
      
    @ca2oh4 #3
    @luciankaltz  我去看看时序数据库,谢谢
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部