PHP结合MySQL实现千万级数据处理PHP结合MySQL实现数千万的数据处理,推荐:《PHP视频教程》
mysql分表思路
一个1亿美元的订单表可以分为5个表,这样每个表只有2000万个数据,分担了原表的压力。表要根据一定条件划分。这里表可以按区域划分,需要一个中间件来控制去哪个表找你要的数据。
中间件:使用主表的自加id作为中间件(中间件适合什么样的领域?独一无二)
分布在怎么?主表插入后,返回一个id,根据这个id和表的数量取模,如果余数是几,数据插入哪个表。
注意:子表中的id应该与主表中的id一致
以后只有插入操作会用到主表,修改、删除、读取都不需要主表
redis消息队列
1,什么是消息队列?
在消息传播过程中保存消息的容器
2、消息队列产生的历史原因
消息队列的特点:先进先出
首先将要执行的sql语句保存在消息队列中,然后将它们异步、平滑地依次插入数据库
应用:新浪,先把即时评论放到消息队列中,然后通过定时任务把消息队列中的sql语句依次插入数据库
修改
通过操作修改子表
这个修改有问题。主表和子表的数据会不一致。如何使主表和word表的数据一致?
redis队列保持主表子表数据一致
修改完成后,要修改的主表数据将存储在redis队列中
然后linux定时任务(可控制)循环执行redis队列中的sql语句,同步更新主表的内容
mysql分布式之分表(查,删)
查询只需要查询子表,不需要查询总表
删除:首先根据id找到要删除的子表,然后删除它,然后按一条sql语句将总表数据删除到消息队列中
然后执行计划任务,删除总表数据
计划任务:
mysql分布式之分库
分库思路
图书馆分区示意图:
mysql分布式之分库(增)
注意:操作数据库后,必须关闭数据库连接,否则mysql会认为同一数据库一直在连接
或者使用一个模型来确定要加载哪个配置文件以及要连接哪个数据库
mysql分布式之分库(改)
原理与新原理相同
mysql分布式之分库(查,删)
原则上是相似的
删除
执行队列
mysql分布式之缓存(memcache)的应用
将数据放入缓存,节省数据库开销,先在缓存中检查,直接取出,如果没有,则在数据库中检查,然后存储在缓存中
编辑完信息后,您需要删除缓存,否则您将总是读取缓存的数据,而不是修改后的数据
以上是结合php和MySQL实现数千万数据处理的详细内容。请多关注其他关于Lei.com PHP知识的相关文章!