求教 ,如何设计多客户端轮询同一条数据?

timezone 2018-09-08 06:54:51
有多个客户端轮询表A中记录,有可能同一条记录被多个客户端使用,如何设计做到高效率查询?
最开始设计的是每个客户端查询后将记录的字段标志位添加上该客户端的编号,whoTaked='c1c2c3' ,然后轮询时用position来判断这条记录是否被取走过,完全能满足需要,但效率太低,因为在sql语句中使用了函数。
后改成取recordid来判断每个客户端记录自已符合条件的记录id,每个客户端登陆上来先用一次position查看上次取到了哪条记录,每个客户端保存各自的id,后面就不用position来判断谁取过这条记录,而是不断取大于这个id满足条件的记录,效率提升,也能满足需求,看似是完美解决了。
现在发现这个设计有个问题,因为业务中有个机制是有一部分记录是需要人工审核的,有一部分记录是不需要人工审核的,假如用户提交的数据id是1234状态是1因为需要人工审核所以暂时不能取走,突然来了一条不需要人工审核的1235,等人工审核过后,1234的状态是2可以被取走了,当前的客户端id已经到1235了,1234就不会被取走了。如何设计?请高人指点
...全文
273 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ETJojo 2018-09-09
  • 打赏
  • 举报
回复
加个判断,判断客户是否取走过这条记录,可行吗?记录被客户端取走后是存放在客户端数据库的?一条记录被取走后,服务器上就没有了?
timezone 2018-09-08
  • 打赏
  • 举报
回复
谢谢指点,队列可能难实现,因为入库的数据是不同的接口传送过来的,只能保存到数据库中,等待客户端取走,或者等待人工审核,如果用程序语言在内存中处理,可能会因为程序不稳定造成数据丢失,还有没有可以通过改进数据库设计来实现的方法呢?因为我原先的方法是可以做到的,只是在轮询语句中使用了函数造成了数据库负担过重而不得放弃。继续请教 。。。
mingqing6364 2018-09-08
  • 打赏
  • 举报
回复
用队列就行,先进先出。
不在mysql中实现,利用redis或者程序语言。
单线程分配id,再由客户端根据id到数据库中取值,处理。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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