求解决方案,大量埋点数据中的事件查询 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qtxxm
V2EX    程序员

求解决方案,大量埋点数据中的事件查询

  •  
  •   qtxxm 2023-08-22 15:59:00 +08:00 2054 次点击
    这是一个创建于 790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景是这样子的:
    日增 200W 用户操作记录相关的埋点数据(带 ip 、经纬度、时间等信息),目前存在单节点单分片的 mongodb 中,业务方有一个需求,查询 某经纬度坐标范围 X 米内的 近 1 个月发生的相关事件。
    看了下 mongodb 对应的 collection 已经有 130+GB ,目前线上执行这个查询要 好几分钟,无法满足业务实时查询的需求。
    求一个解决方案
    25 条回复    2023-08-25 17:57:35 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       2023-08-22 16:01:03 +08:00
    "查询 某经纬度坐标范围 X 米内的 近 1 个月发生的相关事件。"
    这个肯定可以细化一下把除了今天之前的预先算好存下来
    qtxxm
        2
    qtxxm  
    OP
       2023-08-22 16:04:13 +08:00
    @liprais 这个 经纬度坐标,是动态的。
    qtxxm
        3
    qtxxm  
    OP
       2023-08-22 16:05:21 +08:00
    @liprais 这个 经纬度坐标,是动态的。
    @qtxxm 就是 指不定 业务那边会根据 其他客户发生事件的经纬度坐标作为 圆心,查询周边近期发生的事件
    F281M6Dh8DXpD1g2
        4
    F281M6Dh8DXpD1g2  
       2023-08-22 16:06:28 +08:00
    @qtxxm 你想的太简单了,建议多想想
    不然就打钱买大机器或者换 pg
    Morriaty
        5
    Morriaty  
       2023-08-22 16:32:49 +08:00
    一个月 6000w 的数据,不差钱的话,3 台中配的 es 还是能轻松抗住这个请求的
    hyqCrystal
        6
    hyqCrystal  
       2023-08-22 16:44:45 +08:00
    讲道理 mongodb 已经不适合你的业务场景了 上 es 集群吧
    kingbill
      &nbs; 7
    kingbill  
       2023-08-22 16:50:23 +08:00
    换 pg 吧,做 gis 相关貌似很擅长
    Belmode
        8
    Belmode  
       2023-08-22 17:31:49 +08:00
    有个优化方案,你看可行。
    把 mongo 中的那一个数据集表 a 再拆一下,只取坐标字段、时间和当前记录的 id ,放到一个新表 b 中(或者一开始落库的时候,就再多存一份)
    尽可能减少 b 的大小(如果一个月还是很多数据,那么按照 10 天拆分表 b1 ,b2, b3),这样就可以使用地理索引和时间字段索引快速查询近一个月发生事件的 id
    使用 id 去表 a 中查询这个事件详情(这一步应该很快)
    这个方案是尽可能继续使用 mongo ,不大改造的前提下,增加查询速度。
    MoYi123
        9
    MoYi123  
       2023-08-22 17:34:52 +08:00
    不太懂 mongodb 啊,
    https://www.mongodb.com/docs/manual/geospatial-queries/#geospatial-indexes
    你现在已经用了这个吗? 还是硬算的?
    rrfeng
        10
    rrfeng  
       2023-08-22 17:35:04 +08:00 via Android
    日增这么多,上分片呗。
    james2013
        11
    james2013  
       2023-08-22 17:37:34 +08:00
    使用 1 个库专门存近 1 个月的用户操作记录,定期删除一次过期数据,比如 1 个小时,然后使用这个库专门查询这种记录
    fivesmallq
        12
    fivesmallq  
       2023-08-22 17:43:02 +08:00
    ES 我估计可以,之前几千万的数据量经纬度查询还是很快的。
    dw2693734d
        13
    dw2693734d  
       2023-08-22 17:48:14 +08:00 via iPhone
    postgres 用 postgis 插件,加上 citus 搞一搞分片
    winglight2016
        14
    winglight2016  
       2023-08-22 17:51:39 +08:00
    推荐 ES 的几位,是否有试过 1 亿以上的索引查询?我这里不知道是 ES 机器配置低了,还是数据量大了,查询统计都挺慢的,而且因为不能关联索引查询,已经考虑迁移到其他数据库了
    E520
        15
    E520  
       2023-08-22 18:03:37 +08:00
    clickhouse 啊!
    qtxxm
        16
    qtxxm  
    OP
       2023-08-22 18:21:12 +08:00
    @MoYi123 目前应该是硬算
    qtxxm
        17
    qtxxm  
    OP
       2023-08-22 18:22:40 +08:00
    @Belmode 我们试试看
    Elilili
        18
    Elilili  
       2023-08-22 18:52:06 +08:00
    双写一份数据,构建 geohash 索引
    youngce
        19
    youngce  
       2023-08-22 19:03:14 +08:00 via iPhone
    硬算就是慢吧,好歹用一下 GIS 特性
    kinXdle
        20
    kinXdle  
       2023-08-23 10:34:35 +08:00
    timescaledb + postgis
    guangming3055
        21
    guangming3055  
       2023-08-23 10:44:00 +08:00
    @winglight2016 三亿主文档,数十亿的嵌套子文档,阿里云 6 节点 8 核 32G 服务器,查询非常迅速,地理位置什么的没有任何问题
    qtxxm
        22
    qtxxm  
    OP
       2023-08-23 12:28:33 +08:00
    @guangming3055 牛逼。不过这 6 节点 机器费用,我们这边估计批不下来
    webszy
        23
    webszy  
       2023-08-24 22:29:07 +08:00
    @winglight2016 咱都 1 亿数据量了,能不能加点服务器
    winglight2016
        24
    winglight2016  
       2023-08-25 08:41:14 +08:00
    @guangming3055 机器配置差不多,不过我们只有三节点,我都已经在琢磨用 clickhouse 或者 mongodb 来代替 es 存日志了
    @webszy 因为不是业务数据库所以预算没那么高,凑合能查日志就行
    qtxxm
        25
    qtxxm  
    OP
       2023-08-25 17:57:35 +08:00
    @winglight2016 一个月前看到过某个厂用 CK 替换 ES 存储日志的文章,成本下降挺多的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1612 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:27 PVG 00:27 LAX 09:27 JFK 12:27
    Do have faith in what you're doing.
    ubao msn 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