php高并发下的疑问。

php中文网
发布: 2016-06-06 20:22:45
原创
1549人浏览过

在高并发下,如果我插入一条数据,返回一个insert_id,那么这个insert_id会不会为别人所用呢。如果不被别人所用,php是怎么做到访问隔离的。

回复内容:

在高并发下,如果我插入一条数据,返回一个insert_id,那么这个insert_id会不会为别人所用呢。如果不被别人所用,php是怎么做到访问隔离的。

楼主的理解有问题。。。MySQL的LAST_INSERT_ID()或者说PHP的mysql_insert_id(connection)。请注意,Connection!每次插入数据,MySQL会返回数据给【当前的数据库连接】,告知是插入到第几个位置(ID)的。 根本不存在什么"访问隔离","为别人所用"之类的问题。

——————————————————————————————————————————————————

数据库的存在,本身就是为了解决并发的问题。
查询是可以并发的(同时读取文件不会有问题)。
插入、修改、删除必须是队列方式(同时修改同一个文件???)。

楼主的理解有问题,一个等一个就会一卡一卡的?
举个栗子,现在的一般的机械硬盘的写入速度30-50M/s。
一次SQL写入请求,平均写入3-5KB数据(你TM在逗我,怎么可能这么多),那么理论上,也可以支持10000/s的并发量。
什么叫一卡一卡的 = =

立即学习PHP免费学习笔记(深入)”;

—————————————————————————————————————————————————

回想当年……2333333……
当初我还不会PHP的时候被同学拉去做网站,报名参加活动的那种只有几个网页的网站。
数据提交之后,在PHP里,我就自己定义了一个格式,一条数据一行,把数据全都保存到一个txt文件里。
(在相当长一段时间里,我都觉得,数据库貌似也没那么重要啊,直接读写文件不就完了)
直到后来……
同时对一个文件进行写操作就会发生异常(很底层的问题,操作系统级别的)。
同时对一个文件加锁(防止同时写操作),也可能发生异常(还是操作系统级别的问题)。
对txt的指定位置进行修改,删除,必须从文件里全部读入内存,然后处理,然后写到文件里。
想修改格式,查询,排序……全都要全部读取全部写入。
这时候遇到并发的问题……彻底爆炸,数据各种丢失错误混乱。。。

数据库已经基本是相当完美的解决了这些乱七八糟的问题了。。。

嗯,是的,每个请求的链接都是独立的,10个并发就是10个链接对象,所以insert_id永远不会被其他请求的链接所用!!!

php层面的“隔离”
这个就是PHP的“特性”---每个请求都是一个进程,php-fpm每次都会分配一个对应的worker来处理这个请求。
每个操作都在对应的php-fpm下属的worker下进行,内存管理也是一样。
处理完这个进程就关闭。
你插入的返回id是在各自请求对应的php-fpm下属的worker内存中,不会出现你说的情况。

网胜B2B电子商务系统蓝色风格 2008 SP6.2 普及版
网胜B2B电子商务系统蓝色风格 2008 SP6.2 普及版

  websenB2B是一套经过完善设计的B2B行业网站程序,是windows nt系列环境下最佳的B2B行业网产站解决方案。精心设计的架构与功能机制,适合从个人到企业各方面应用的要求,为您提供一个安全、稳定、高效、易用而快捷的行业网站商务系统。分普及版和商业版等不同版本。一、网胜B2B电子商务系统SP6.2蓝色风格普及版本升级功能说明:1、邮件群发功能:可以选择某一级别的会员,并放入支持html

网胜B2B电子商务系统蓝色风格 2008 SP6.2 普及版 0
查看详情 网胜B2B电子商务系统蓝色风格 2008 SP6.2 普及版

mysql层面的“隔离”
跟引擎有关咯。简单说引擎对应的写入处理不同。MyIASM是表锁,Innodb是行锁,都可以在一定程度上避免并发问题。再高的并发,就要用其他的处理方式了,比如队列等等。

php即便是高并发,单进程连数据库还是单个连接的。
insert id是根据mysql连接的上一条insert语句返回的。
所以对于一个php进程,一个mysql连接,返回的insert id是不会混乱的

兄弟啊,你需要看一本书叫数据库原理,数据库里面有一个概念叫ACID,事务就两种状态,成功和失败。你这边都insert进去了,那就是成功了,就last insert id也是这个事务的返回值。
MySQL本身也支持并发,开N个connection去同步的insert,也不会有问题,最多就是慢一点。

PS:PHP能写出来多高的并发??

php中一个请求一般新生成一个mysql连接,多个session同时请求mysql插入操作如何同步,这是mysql解决的问题。mysql 插入操作是加锁的,保证了原子性。

@MrGeneral 说的有部分问题,在这里贴出来,大家补充下:
---每个请求都是一个进程,每次都会启动一个php-fpm。
这句话,每个请求都是一个进程,没错,但是每次都会启动一个php-fpm?

这个是不对的,每次都会启动一个fastcgi的进程,但是这个进程是不是每一次都重新创建的,那倒未必,可能是从php-fpm维护的”进程池“里面取的,也就是说,php-fpm负责进程的管理,部分优化,比如cache住啊,避免了每次都创建进程的开销。而php-fpm本身是常驻的。

求反驳~

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号