• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qtxxm
V2EX  ›  程序员

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

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