PHP-解决90%查询1%数据的千万级的数据库设计

需求定制 需求定制 主题:1050 回复:2283

PHP-解决90%查询1%数据的千万级的数据库设计

偏爱自由 发布于 2017-03-12 字数 193 浏览 1100 回复 4

设一数据量为千万级的数据库,通过监控发现,有90%的查询请求都是指向同一部分数据的,而这部分数据只占整个数据库容量的1%。

问:如何设计数据库结构,以避免造成瓶颈,大家给些实用的建议!

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(4

瑾兮 2017-08-26 4 楼

分表,将存储该数据的表分为一百个或者一千个,如 table_1 table_2 table_3...table_100,写个hash算法或位移算法,任何值传入所得值都是在1-100以内,入库时传主键入hash得到值value为table后缀数字如table_value,该数据入table_value表,查询时候同样,这样每张表只有10万数据,没有瓶颈

用增加Ehcache,用户每查询一条记录,记入cache中,设定过期时间,如果put时间到当前时间达到过期时间就清理掉(定时器清理),这样cache中最终慢慢靠近最常用的那1%的数据,没有瓶颈

偏爱自由 2017-08-21 3 楼

既然这部分数据访问频率这么高,你可以把它存在memchache或缓存文件里,或者将数据放在内存里。

晚风撩人 2017-07-13 2 楼

1、90%的查询访问1%的数据,这1%的数据必然已经被系统缓存并且有很高的命中率,在这种情况下如果还有性能瓶颈,那就是SQL引擎和硬件的问题了。不考虑硬件问题,大家建议你用NOSQL是唯一正确的解决方案(能让你获得数量级的性能提升)。
2、分表通常是为了解决海量数据的存储问题,它让你能够在数据库缺少集群解决方案的情况下获得一定的横向扩展能力,同时负载也能分担到多台物理设备,从这个角度上讲也能解决一些性能瓶颈。但分表违背了关系数据库的初衷,也牺牲了SQL的方便性,增加了程序员的工作量,既然如此,那何不用NOSQL呢?

浮生未歇 2017-05-02 1 楼

缓存这部分数据啊!这种情况和数据库关系不大,数据库只要按照一般的优化即可~