一道面试题

thomasLand 2013-11-03 09:30:28
mysql 5.6
现有如下场景:
某一时间内,指定的表会被多个线程操作,每个线程都会更新表中的一部分数据。更新哪一部分数据,由用户的选择决定。就线程安全或数据库的角度,可能会出现什么问题。

当时回答这个问题之前,聊到了尽量少的锁表,可以提高性能。
...全文
181 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天府荣城 2013-11-06
  • 打赏
  • 举报
回复
如果可以的话,在程序里面对同一行数据的更新做个队列,就算是并发更新,也总有一点点的毫秒或者纳秒的时间差距,所以可以从这点做队列更新。 当然这个只是个人的一个理论设想,还没有具体实践过。
thomasLand 2013-11-04
  • 打赏
  • 举报
回复
引用 1 楼 yetaodiao 的回复:
这样回答估计没戏了吧
当时回答这个问题之前,聊到了尽量少的锁表,可以提高性能。 不是这个问题的回答。 请问下,关于这个问题您有什么看法吗?
  • 打赏
  • 举报
回复
这样回答估计没戏了吧
MiceRice 2013-11-04
  • 打赏
  • 举报
回复
对MySQL极端不熟悉,但你的帖子里面说的是InnoDB,没记错的话是不支持事务的。 那恐怕并发情况下,全部要靠程序来控制事务,难度很高。 比如: 用户A,把部分员工的工资信息取出来,根据基本工资、绩效工资、岗位津贴等信息,然后根据另一张表的社保、公积金、补贴的数据情况,计算应缴纳个税所得税、应缴纳公积金等信息,回写工资信息表。 用户B,在给部分员工做工资调整。 用户C,再给员工更新本月绩效情况。 然后你的程序是多台服务器集群部署,这种情况下,可能会出现各种灵异数据。
thomasLand 2013-11-04
  • 打赏
  • 举报
回复
引用 3 楼 songbb123 的回复:
更新前,把所有不更新的数据,作为where条件,放到更新的语句里面,这样应该避免并发。做的事网站开发,线程这块接触的少
引用 4 楼 ldh911 的回复:
[quote=引用 楼主 thomasks 的回复:] 某一时间内,指定的表会被多个线程操作,每个线程都会更新表中的一部分数据。更新哪一部分数据,由用户的选择决定。就线程安全或数据库的角度,可能会出现什么问题。
个人觉得,这类开放式命题,如果能设法跟面试人交流起来会比直接自己说一堆更合适些。 另外,听你的说法,显得你只是知道大概性理论;既然是更新就一定会锁表,所谓尽量少锁表就太空虚了。 还有,他问的问题是可能会出现什么问题,那么你至少要设法举点例子出来,设想出能出现问题的场景。 比如: ◎ 假定两个线程同时取出表中某行记录,进行计算后再更新进去;然后要怎么避免。 ◎ 假定线程A取出记录X(ForUpdate)然后准备更新记录Y,而线程B则取出记录Y(ForUpdate)然后准备更新X;然后要怎么避免。 面试官估计是想看看你能举出多少例子,以及你沟通分析的逻辑请,来看看你能力情况。[/quote] 首先多谢二位。 当时我的答案是: 场景与存储引擎、事务模式都有关系。 如果行被锁定、至少有一部分线程会不能执行更新操作。 严重的话,出现线程之间相互等待。死锁也是有可能的。 在mysql论坛的讨论如下: http://bbs.csdn.net/topics/390631395?page=1#post-395957468
MiceRice 2013-11-04
  • 打赏
  • 举报
回复
引用 楼主 thomasks 的回复:
某一时间内,指定的表会被多个线程操作,每个线程都会更新表中的一部分数据。更新哪一部分数据,由用户的选择决定。就线程安全或数据库的角度,可能会出现什么问题。
个人觉得,这类开放式命题,如果能设法跟面试人交流起来会比直接自己说一堆更合适些。 另外,听你的说法,显得你只是知道大概性理论;既然是更新就一定会锁表,所谓尽量少锁表就太空虚了。 还有,他问的问题是可能会出现什么问题,那么你至少要设法举点例子出来,设想出能出现问题的场景。 比如: ◎ 假定两个线程同时取出表中某行记录,进行计算后再更新进去;然后要怎么避免。 ◎ 假定线程A取出记录X(ForUpdate)然后准备更新记录Y,而线程B则取出记录Y(ForUpdate)然后准备更新X;然后要怎么避免。 面试官估计是想看看你能举出多少例子,以及你沟通分析的逻辑请,来看看你能力情况。
天府荣城 2013-11-04
  • 打赏
  • 举报
回复
更新前,把所有不更新的数据,作为where条件,放到更新的语句里面,这样应该避免并发。做的事网站开发,线程这块接触的少

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧