ES 中物联网数据获取最新一条,那种写法性能最好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tairan2006
V2EX    Elasticsearch

ES 中物联网数据获取最新一条,那种写法性能最好?

  •  1
     
  •   tairan2006 2021-02-07 13:12:19 +08:00 4668 次点击
    这是一个创建于 1706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前 schema 设计的是每台设备每天建一个 index,比如 iot_env_info_1_2020.02.07 ,id 是时间戳(@timestamp )。在 index template 里面 alias 所有 info_env_info*为 info_env_info 。

    物联网比较常用的查询是显示设备最新一条数据。最简单查询就是按@timestamp对 iot_env_info_1*排倒序,size=1,就完事了。

    还有一种写法,是用_cat/indices/info_env_info_1*?format=json&s=index:desc,先看这个设备建立了哪些索引,按名称排倒序,取出第一个。然后对这个特定的索引按时间戳排倒序取出第一条。

    理论上后者需要查询的数据更少,但是比较尴尬的是_cat 这个 API 不支持分页,取出的是全量索引,一年 365 天,存个几年之后这个返回数据量还是有点大,费内存…

    个人对 es 的排序机制不是很明确,请教一下用第一种写法在数据量大的时候性能下降明显么?不太想做无谓的优化。

    第 1 条附言    2021-02-07 17:59:13 +08:00
    手残,应该是 iot_env_info*,有的 iot 打成 info 了
    24 条回复    2021-02-08 23:22:53 +08:00
    tairan2006
        1
    tairan2006  
    OP
       2021-02-07 13:34:04 +08:00
    当然最简单的还是直接缓存设备最新一条数据到 redis 里,这个就不用说了( ̄ ̄")
    misaka19000
        2
    misaka19000  
       2021-02-07 13:44:55 +08:00
    改成按月拆分索引
    tairan2006
        3
    tairan2006  
    OP
       2021-02-07 13:52:36 +08:00
    @misaka19000 这样也行,10 秒采集一次的话,单索引一个月也就 26 万左右,Emmm
    misaka19000
        4
    misaka19000  
       2021-02-07 13:53:26 +08:00
    @tairan2006 #3 才 26 万数据?那整一个索引得了
    misaka19000
        5
    misaka19000  
       2021-02-07 13:53:49 +08:00
    一个索引一年也才 300 万数据
    luofan004
        6
    luofan004  
       2021-02-07 13:55:42 +08:00
    tairan2006
        7
    tairan2006  
    OP
       2021-02-07 13:58:11 +08:00
    @misaka19000 拆分还要考虑方便删除旧数据,比如只给用户保留最近半年的数据…毕竟有的项目设备上千个
    YouLMAO
        8
    YouLMAO  
       2021-02-07 14:00:00 +08:00 via Android
    物联网,opentsdb
    est
        9
    est  
       2021-02-07 14:08:30 +08:00
    看看 routing ?
    Morriaty
        10
    Morriaty  
       2021-02-07 14:35:03 +08:00
    再弄个 iot_hot 别名指向最近七天(具体时间看业务)不就行了吗,建议看下 es7 之后的 ILM 索引生命周期管理(冷热分离)
    tairan2006
        11
    tairan2006  
    OP
       2021-02-07 15:55:54 +08:00 via Android
    @Morriaty 需求是最新一条…有的设备可能好几天没数据(比如过年把设备断电了…)
    tairan2006
        12
    tairan2006  
    OP
       2021-02-07 16:03:57 +08:00 via Android
    @est 小厂,就一个副本…靠 routing 提高性能好像不太可行?
    est
        13
    est  
       2021-02-07 16:29:32 +08:00
    @tairan2006 看下上面说的那个 ILM 冷热分离。感觉有戏。
    tairan2006
        14
    tairan2006  
    OP
       2021-02-07 16:58:52 +08:00 via Android
    @est 这个我研究过 ,感觉最多用个 delete…
    Morriaty
        15
    Morriaty  
       2021-02-07 17:26:51 +08:00
    @tairan2006 #11 ilm 除了时间策略,还有 doc 数策略,超过多少条才触发 rollover
    AS4694lAS4808
        16
    AS4694lAS4808  
       2021-02-07 17:37:48 +08:00
    改成_cat/indices/info_env_info_1*?h=index&format=json&s=index:desc 这样呢?一年的索引名也就十多 KB
    无脑方法,大神请无视
    tairan2006
        17
    tairan2006  
    OP
       2021-02-07 17:53:33 +08:00 via Android
    @Morriaty 嗯 物联数据其实还好 大部分采样周期是固定的,用时间没啥问题…
    tairan2006
        18
    tairan2006  
    OP
       2021-02-07 17:58:21 +08:00
    @AS4694lAS4808 我改成按月建 index 了,这样比较均衡。
    AS4694lAS4808
        19
    AS4694lAS4808  
       2021-02-07 18:10:07 +08:00
    @tairan2006 我公司用的 aws 双核 16G 的多个实例,每个索引几亿条 IOT 日志数据,查起来都挺快的。。其实第一种感觉可以放心的用
    tairan2006
        20
    tairan2006  
    OP
       2021-02-07 18:15:58 +08:00 via Android
    @AS4694lAS4808 那更好:-D
    Anshay
        21
    Anshay  
       2021-02-08 09:30:54 +08:00 via iPhone
    这个业务需求,我的做法是根据时间拿到涉及到的索引传进去。因为是按天,不建议用别名。所有查询根据时间自动传入涉及索引。
    我做的业务和贵司类似,踩过挺多坑。
    strawberryBug
        22
    strawberryBug  
       2021-02-08 11:46:11 +08:00
    试试这种,创建索引的时候就倒序存储,这样倒序查询的时候就不会从最早的数据开始扫描。
    PUT my-index-000001
    {
    "settings": {
    "index": {
    "sort.field": "date",
    "sort.order": "desc"
    }
    }
    }
    官网链接( https://www.elastic.co/guide/en/elasticsearch/reference/master/index-modules-index-sorting.html)
    lithium4010
        23
    lithium4010  
       2021-02-08 11:57:34 +08:00 via Android
    够用的话越简单越好
    tairan2006
        24
    tairan2006  
    OP
       2021-02-08 23:22:53 +08:00 via Android
    @strawberryBug 这个我知道,和我想问的不冲突。这算是单个索引内的优化…
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2897 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:48 PVG 21:48 LAX 06:48 JFK 09:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86