微信海量数据查询如何从1000ms降到100ms?( 四 )


 
所以核心问题在于:能否进一步降低 Segments 大小?
 
维度爆炸问题在业界都没有很好的解决方案 , 大家要做的也只能是尽可能规避它 , 因此这里 , 团队在查询层实现了子维度表的拆分以尽可能解决这个问题 , 用空间换时间 , 具体做法为:
● 对于维度复杂的协议 , 抽离命中率高的低基数维度 , 建立子维度表 , 实时消费并入库数据 。
● 查询层支持按照用户请求中的查询维度 , 匹配最小的子维度表 。
 

微信海量数据查询如何从1000ms降到100ms?

文章插图
 
04
 
优化成果
 
4.1 缓存命中率>85% 
在做完所有改造后 , 最重要的一点便是缓存命中率 。因为大部分的请求来自于1天前的历史数据 , 这为缓存命中率提供了保障:
 
  • 子查询缓存完全命中率(无需查询Druid):86%
  • 子查询缓存部分命中率(秩序查询增量数据):98.8%
 
最明显的效果就是 , 查询访问 Druid 的请求 , 下降到了原来的 10% 左右 。
 
4.2 查询耗时优化至 100ms 
在整体优化过后 , 查询性能指标有了很大的提升:
平均耗时 1000+ms -> 140ms;P95:5000+ms -> 220ms 。
微信海量数据查询如何从1000ms降到100ms?

文章插图
 

微信海量数据查询如何从1000ms降到100ms?

文章插图
 
05
 
结语
 
微信多维指标监控平台  , 是微信监控平台的重要组成部分 。在分析了用户数据查询行为之后 , 我们找到了数据查询慢的主要原因 , 通过减少单 Broker 的大跨度时间查询、减少 Druid 的 Segments I/O 次数、减少 Segments 的大小 。我们实现了缓存命中率>85%、查询耗时优化至 100ms 。当然 , 系统功能目前也或多或少尚有不足 , 在未来团队会继续探索前行 , 力求使其覆盖更多的场景 , 提供更好的服务 。
 
以上是本次分享全部内容 , 欢迎大家在评论区分享交流 。如果觉得内容有用 , 欢迎转发~
 
作者:仇弈彬
来源:微信公众号:腾讯云开发者
出处
:https://mp.weixin.qq.com/s/_hqYCY-ySKxSkYNC5WXH2g

【微信海量数据查询如何从1000ms降到100ms?】


推荐阅读