当前位置: 首页 > 后端技术 > PHP

你知道MySQL是如何处理千万级数据的吗?

时间:2023-03-29 21:00:48 PHP

mysql分表思路一张1亿订单的表可以分5张表,让每张表只有2000万条数据,分担原表的压力,需要根据一定的条件分表,这里可以按地区分表,需要一个中间件来控制去哪个表找你要的数据。**中间件:**根据主表的自增id作为中间件(什么样的字段适合做中间件?必须是唯一的)**如何分配?**主表插入后,返回一个id,根据id和表的个数取模,余数为任意个数则数据插入到哪个表中。**注意:**子表中的id必须和主表的id一致。之后只有insert操作会使用主表,修改,删除,读取,不需要使用主表redis消息队列什么是消息队列?Answer:消息传播过程中产生存储消息的容器消息队列的历史原因Answer:主要原因是在高并发环境下,由于缺乏同步处理的时间,请求往往阻塞,比如大量的插入、更新等请求同时到达MySQL,直接导致无数的行锁和表锁。最终会累积太多的请求,从而引发并发错误。通过使用消息队列,我们??可以异步处理请求,从而减轻系统的压力。消息队列的特点:先进先出先将要执行的SQL语句保存在消息队列中,然后按照平滑异步插入的方式应用到数据库中:新浪,即时评论先放入消息队列,然后通过定时任务发送消息队列中的sql语句一条一条插入数据库修改子表进行修改。这个修改有问题。主表和子表的数据会不一致。如何让主表和分表的数据保持一致?redis队列保持主表和分表数据一致。修改完成后,主表的数据会被修改并存入redis队列,然后linux定时任务(contble)会循环执行redis队列中的sql语句更新主表的内容表同步。分表(查找、删除)查询只需要查询分表即可,不是一般的表删除,先根据id找到要删除的分表,然后删除,然后push一条sql语句删除将总表的数据放入消息队列中执行定时任务删除总表数据定时任务:mysql分布式数据库分库思路单库单表单表是最常见的数据库设计,例如有house数据库db中有一张用户(user)表,所有用户都可以在db库中的user表中找到。单库多表随着用户数量的增加,用户表的数据量会越来越大。当数据量达到一定程度时,对user表的查询会逐渐变慢,从而影响整个DB的性能。可以通过某种方式对user进行水平切分,生成user_0000和user-0001等两张表结构完全相同的表,user_0000+user-0001+...的数据恰好是一个完整的数据。多库多表随着数据量的增加,单个DB的存储空间可能不够用,随着查询量的增加,单个数据库服务器已经无法支撑。这时候就可以进一步横向区分数据库了。分库示意图:mysql分布式分库(增加)注意:操作一个数据库后,必须关闭数据库连接,否则mysql会认为已经连接的同一个数据库仍然是一个模型来确定哪个配置文件加载和连接到哪个数据库。mysql分布分库(修改)原理与新增mysql分布分库(查、删)原理类似。删除执行队列。mysql分布式缓存(memcache)的应用将数据放入缓存中,以节省数据库开销。先去缓存里查,有的话直接取出来,没有的话去数据库查,然后存入缓存。编辑信息后,需要删除缓存,否则读取的永远是缓存的数据,而不是修改后的数据。更多学习内容可访问【与各大厂商对比】完整的优质PHP架构师教程目录,只要你看了保证你的薪水更上一层楼(持续更新中),以上内容希望帮助大家。很多PHPer在前进的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感。我不知道从哪里开始改进它。我整理了一些这方面的资料,包括但不限于:分布式架构、高扩展性、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、需要进阶干货的可以免费分享Docker、微服务、Nginx等知识点给大家。有需要的可以点此进入高级PHP月薪30k>>>架构师成长路线【免费获取视频和面试资料】