怎样用PHP+mysql实现以下功能?? 400 报错
功能描述如下:1000个用户向本服务器提交共1000个数据(有可能他们是同时提交数据),我想将这1000个数据存到数据库的一张表里,但是我想通过时间先后的顺序将这1000问题排序,但是有可能有很多数据拥有相同的时间标签,那服务器会怎么排序插入数据库??
第二问题:假设这一千个数据全部排序成功,又有1000个用户要来获取这1000个数据,他们的请求又有可能是同一时间点发出的请求,但是我们必须要安排第一个请求的人得到第一个数据,也是按时间先后分配,那服务器要怎样处理这些同时发来的请求?也就遇到很多并列第一的请求??
第一问简单 用队列就行 第二问 队列中间件或者原子锁 但这就不是同时了######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??######你现在希望实现的就是有序嘛,那肯定要用锁才行,比如两个请求A和B同时发出,首先都需要获取锁,如果没获取成功,就等待,强制有序;存取都一样,只要保证了顺序,其他的都好说。######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??######就是并发及队列的应用,这方面的技术都有相应的解决方案,可以去google搜索试试。######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??######高并发问题嘛。队列 + 微秒时间######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??######gearman######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??######
第一个比较好解决,业务部分不考虑并发和排序,在表中有2个字段,id(对于mysql用自增,对于oracle用sequence),另一个timestamp记录时间,但是要是原子性事务保证。排序的时候用 order by timestamp,id 就可以了。
第二个,在php这玩意下,不提供线程、并发控制和锁、CAS原子量,mysql没有实现sequence等等,所以你这个方案暂时看很难实现(当然手动锁表之类方式也能实现,但实现了也没啥价值 )。
######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??######有很多数据拥有相同的时间标签, 这个时间标签怎么定的?在计算机里有真正的“同时”?
时间搞细点,再做个队列
另外,“同时”“并列”这些概念是不对的,只要时间片足够小,先后顺序是一定存在的。
即使并发很大,竞争很激烈,但只有一个能够获得锁,所以看起来“同时”的东西,会变成锁机制下的硬性排序。
######感谢你的回答!追问:1、向淘宝有时间搞秒杀活动,几十万用户同时发出请求,淘宝是怎样选出第一个请求的? 2、还有如果有几十万用户同时登陆一个网站,在PHP网站下,都是访问到LOGIN.PHP这个文件,这时这个LOGIN.PHP文件是什么样的工作状态??版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。