[英]web-service queue design, with a DB
我正在尝试设计一个允许将注册用户添加到队列中的移动应用程序。 向网络服务请求一个号码,然后以存储的号码进行响应。 下一个发出请求的用户将获得连续编号。
我正在使用C#作为服务器端语言,并将mySQL用于users数据库。
客户端发送HTTP POST请求,其中“身份验证”标头为“ username:password”,“ x-action”自定义标头为“ joinQueue”。 并将他的号码排队。 稍后,他可以使用“ checkQueueStatus”操作来轮询Web服务,以查看他现在在队列中的位置。
服务器端执行以下操作:
作为Web服务的新手,我不太确定如何设计服务器端部分。 具体来说,使用以下信息创建另一个表(队列表)是否有意义:
userID | placeInQueue
301452 1
444592 2
612712 3
042125 4
并且管理员客户端现在可以通过“ serviceFirstUser”操作发送HTTP请求,这将减少队列中每个人的placeInQueue?
这是合理的设计吗?
谢谢。
使用QueueTable是一个好主意,但是您不需要这样做:
您可以只索引placeInQueue,然后获取max_place-min_place
CREATE TABLE IF NOT EXISTS `queue`
(
`userID` INT(9) PRIMARY KEY NOT NULL,
`placeInQueue` BIGINT(16) AUTO_INCREMENT NOT NULL,
INDEX(placeInQueue)
) ENGINE=MyISAM;
因此,您只是获得第一个用户在队列中的位置(以恒定的复杂度):
SELECT * FROM `queue` ORDER BY `placeInQueue` ASC LIMIT 1
然后,您可以以对数复杂度获得用户的位置:
SELECT * FROM `queue` WHERE `userID`='<user_id>' LIMIT 1
他的实际位置是(他的placeInQueue)-(第一个的placeInQueue)+1。
然后,您不需要进行线性更新...删除第一个可以以对数复杂度完成(对于placeInQueue索引是常数,对于userID是对数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.