首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >票务系统逻辑

票务系统逻辑
EN

Server Fault用户
提问于 2016-12-30 11:08:07
回答 1查看 151关注 0票数 1

目前我们有一个票务管理系统,就像所有的票务系统一样,它需要以一种循环的方式将案件分配给代理。同时,代理可以应用自己的过滤逻辑并对其队列进行工作。

问题是,

  1. 现在有票的桌子很大,超过一千万行。
  2. 一张票不应分配给两个不同的用户。
  3. 为了解决上面的问题,这就是我们的流程,
  4. 使用筛选条件触发选择查询并限制0,1
  5. 然后根据id选择由上述查询返回的行,并锁定行以进行更新。
  6. 最后,我们启动更新程序,称用户X已经选择了这种情况。
  7. 当步骤3执行时,其他用户无法获得相同情况下的锁,因此他们会触发3次查询,以获得下一个可用的情况。
  8. 随着用户数的增加,这一次在步骤4中会越来越高。

我们尝试在第4步本身执行更新选择,但这会使整个查询变慢。假设这是因为select查询中有大量行。

问题,

  • 我们是否需要采取另一种方法呢?
  • 在存储过程中执行select和update是否会确保与对更新执行select和update相同的结果?
EN

回答 1

Server Fault用户

发布于 2016-12-30 11:30:15

我会这样处理这个问题:

  1. 更新由用户USERID:UPDATE tickets SET processedby=USERID WHERE processedby = (SELECT id FROM tickets WHERE processedby=NULL LIMIT 0,1)处理的第一张打开的票证
  2. 拿到票,SELECT * FROM tickets WHERE processedby=USERID
  3. 处理完票证后更新它。
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/823376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档