2
回答
mysql怎么处理并发写入
如题 ,新手对处理数据不熟悉。比如:通信机制是客户端给我发送zip数据包,假如有10w同时给我发送请求,该怎么处理好 ,而且一天这张表每天都在变大,怎么处理
举报
breeder
发帖于3年前 2回/1K+阅
共有2个答案 最后回答: 3年前

如果你说的"处理",只是把接收到的数据写入某个表,那就没什么好讨论的,解决方法如下:

  1. 设计线程A专门用于接收客户端的zip包,并对其解压到服务器本地目录。
  2. 设计线程B专门读取解压后的数据文件,每读取一批(比如10000条),就调用线程C以异步的方式批量写入数据库。 即,一边读文件,一边写数据库。
  3. 对于你说”这张表天天在变大”,那就按时间建分区表,比如按月建分区。

--- 共有 6 条评论 ---
breeder回复 @breeder : 是个新手,不是很懂处理并发 3年前 回复
breeder回复 @林中漫步 : 主要是php没有 实际的多线程 而且php需要被动触发 3年前 回复
林中漫步回复 @breeder : 防重复写入,那你要先在业务层面定规则了, 即怎么才算重复?然道客户端会发重复的? 3年前 回复
林中漫步回复 @breeder : 采用nio或mina框架,一边发一边接。 php我不会,java还行。 3年前 回复
breeder回复 @breeder : zip包,你这个解压之后的东西怎么处理,我现在是客户端发一个我接一个解压读完之后就删除,就是不知道这个可不可处理并发 3年前 回复

php没有处理并发但是服务器一般都是支持高并发的,服务器会多线程操作,php脚本可以同时有多个线程再跑,数据多少重点是看服务器能不能支持,有时候我们其实还是应该思考高并发造成的数据不完整,没有正确的完成数据库的操作。也就是说你数据再多,服务器可以支持就没有问题,数据觉得太多处理不及时,或者服务器使用率不均匀,可以考虑使用队列。

其他问题参照楼上

--- 共有 4 条评论 ---
breeder谢谢!我去学习下 3年前 回复
xper@breeder 方法还是比较多的,比如你把任务写成脚本或者存在数据库,再通过脚本定时检测是否有任务,有就执行,没有就还是定时检测,建议任务脚本用php的,定时器用linux脚本,至于php脚本就是正常的代码,请求啥的,定时器不好意思我也写不了,我知道mysql也有定时器,建议自己百度学习 3年前 回复
breeder回复 @breeder : 先谢谢你回答 3年前 回复
breeder可以说具体点么,服务器用的apach2,怎么实现消息队列 3年前 回复
顶部