计数系统架构实践

最后更新于:2022-04-02 04:12:46

[TOC] ## 计数外置缓存优化 ![UTOOLS1576507299884.png](http://yanxuan.nosdn.127.net/1fbeca7e97ba0aa3173aacdee3f36efd.png) 像关注计数,粉丝计数,微博消息计数,变化的频率很低,查询的频率很高,这类读多些少的业务场景,非常适合使用**缓存**来进行查询优化,减少数据库的查询次数,降低数据库的压力 总结为: 1. 使用缓存来保存读多写少的计数(其实写多读少,一致性要求不高的计数,也可以先用缓存保存,然后定期刷到数据库中,以降低数据库的读写压力) 2. 使用id:type的方式作为缓存的key,使用count来作为缓存的value 3. 多次读取缓存来查询多个uid的计数 ## 缓存批量读取优化 ![UTOOLS1576507449630.png](http://yanxuan.nosdn.127.net/1c047c55c934c0a3ce96ff9cc67c35e5.png) 如果计数value能够事先预估一个范围,甚至可以用一个整数的不同bit来存储多个计数,用整数的与或非计算提高效率 总结为: 1. 使用id作为key,使用同一个id的多个计数的拼接作为value 2. 多个id的多个计数查询,一次搞定 ## 计数扩展性优化 通过列来进行计数的存储,频繁的变更数据库schema的结构显然是不可取的 ![UTOOLS1576507845783.png](http://yanxuan.nosdn.127.net/48f31b4d7d76fa0c50caf0fcaefa4025.png) ![UTOOLS1576507894530.png](http://yanxuan.nosdn.127.net/119d4335850183d1a5f70b823aea4bf1.png) 通过扩展行来扩展属性,可以不需要平凡修改字段(推荐) ![UTOOLS1576508064903.png](http://yanxuan.nosdn.127.net/e874944439dd8b805d386b57b8e8a2e3.png) ![UTOOLS1576508074403.png](http://yanxuan.nosdn.127.net/2019d49ccbfe802a340dd913ce006231.png)
';