我现在有个需求
需要记录页面点击数据,上游吐到redis中,上游怎么吐到redis中对我们来说是透明的,
我们只用关心redis中如何存储就好。
查询需求为
1. 查询某天某页面某分辨率下所有有效点击总数和无效点击总数
2.查询某天某页面某分辨率下所有的点及点击数
3. 框选查询(相当于范围查询) 查询某天某页面某分辨率下 某些坐标点的有效点击总数和无效点击总数。
以及各种维度(比如点击时使用的浏览器,点击地区) 的有效点击数和无效点击数
当前实现是,
一个zset记录全天某页面某分辨率的数据
key为 date_pageid_分辨率 member为: 有效OR无效_浏览器_地区 score为点击数
每个点一个zset
key为 date_pageid_分辨率_横坐标_纵坐标 member为: 有效OR无效_浏览器_地区 score为点击数
两个zset 做辅助范围查询 通过zrangebyscore
date_pageid_分辨率_x member 为 date_pageid_分辨率_横坐标_纵坐标 score为横坐标X的值
date_pageid_分辨率_y member 为 date_pageid_分辨率_纵坐标_纵坐标 score为横坐标y的值
当前实现的问题是:查询速度太慢 全页面查询和全部点查询 可以利用异步任务进行缓存以优化查询速度
但是框选行为 因为范围不定,所以无法进行缓存,导致查询速度很慢。
不知道大家针对查询需求有没有什么更好的设计方案,请多指教。
这个需求用全文检索比较好,可以试试xunsearch。
######我能想到两个办法: 1. 用支持地理信息索引的数据库,比如mongodb
2. 将地图按照一定尺寸分成小块建索引,根据框选方块先找到这些小方块,然后将小方块里面的数据合并。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。