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

260 天前
 qtxxm
场景是这样子的:
日增 200W 用户操作记录相关的埋点数据(带 ip 、经纬度、时间等信息),目前存在单节点单分片的 mongodb 中,业务方有一个需求,查询 某经纬度坐标范围 X 米内的 近 1 个月发生的相关事件。
看了下 mongodb 对应的 collection 已经有 130+GB ,目前线上执行这个查询要 好几分钟,无法满足业务实时查询的需求。
求一个解决方案
1241 次点击
所在节点    程序员
25 条回复
liprais
260 天前
"查询 某经纬度坐标范围 X 米内的 近 1 个月发生的相关事件。"
这个肯定可以细化一下把除了今天之前的预先算好存下来
qtxxm
260 天前
@liprais 这个 经纬度坐标,是动态的。
qtxxm
260 天前
@liprais 这个 经纬度坐标,是动态的。
@qtxxm 就是 指不定 业务那边会根据 其他客户发生事件的经纬度坐标作为 圆心,查询周边近期发生的事件
liprais
260 天前
@qtxxm 你想的太简单了,建议多想想
不然就打钱买大机器或者换 pg
Morriaty
260 天前
一个月 6000w 的数据,不差钱的话,3 台中配的 es 还是能轻松抗住这个请求的
hyqCrystal
260 天前
讲道理 mongodb 已经不适合你的业务场景了 上 es 集群吧
kingbill
260 天前
换 pg 吧,做 gis 相关貌似很擅长
Belmode
260 天前
有个优化方案,你看可行。
把 mongo 中的那一个数据集表 a 再拆一下,只取坐标字段、时间和当前记录的 id ,放到一个新表 b 中(或者一开始落库的时候,就再多存一份)
尽可能减少 b 的大小(如果一个月还是很多数据,那么按照 10 天拆分表 b1 ,b2, b3),这样就可以使用地理索引和时间字段索引快速查询近一个月发生事件的 id
使用 id 去表 a 中查询这个事件详情(这一步应该很快)
这个方案是尽可能继续使用 mongo ,不大改造的前提下,增加查询速度。
MoYi123
260 天前
不太懂 mongodb 啊,
https://www.mongodb.com/docs/manual/geospatial-queries/#geospatial-indexes
你现在已经用了这个吗? 还是硬算的?
rrfeng
260 天前
日增这么多,上分片呗。
james2013
260 天前
使用 1 个库专门存近 1 个月的用户操作记录,定期删除一次过期数据,比如 1 个小时,然后使用这个库专门查询这种记录
fivesmallq
260 天前
ES 我估计可以,之前几千万的数据量经纬度查询还是很快的。
dw2693734d
260 天前
postgres 用 postgis 插件,加上 citus 搞一搞分片
winglight2016
260 天前
推荐 ES 的几位,是否有试过 1 亿以上的索引查询?我这里不知道是 ES 机器配置低了,还是数据量大了,查询统计都挺慢的,而且因为不能关联索引查询,已经考虑迁移到其他数据库了
E520
260 天前
clickhouse 啊!
qtxxm
260 天前
@MoYi123 目前应该是硬算
qtxxm
260 天前
@Belmode 我们试试看
Elilili
260 天前
双写一份数据,构建 geohash 索引
youngce
260 天前
硬算就是慢吧,好歹用一下 GIS 特性
kinXdle
260 天前
timescaledb + postgis

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967402

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX