我正在为客户服务建立一个预订系统,在一定的时间内,我在处理员工的双重预订(这将完成服务)时陷入了困境。我研究了多个相关的问题,但它们都解释了一个房间,座位,产品等的并发解决方案,可以预订或更新。在我们的例子中,客户预订一个时隙的服务,该时隙是通过在给定时间至少有一名免费员工而提供的。让我解释一下..。
我们的数据库现在看起来像这样(为了简单起见,省略了其他表和字段):

如果员工的时间不与该员工不可用的行重叠,则该员工的可用时间为给定时间。此外,我们还通过向不可用表添加一个约束来防止双重预订,该约束阻止为同一员工及时插入重叠的新行。
我们如何允许客户为某项服务预订同一时间段,只要当时有可用的员工,同时具有高并发性,并避免序列化此类事务的整个表?
添加一个表示时隙的新表会更容易吗?如果是的话,这种设计如何实现最佳的并发性?
发布于 2021-06-22 13:30:58
我会将列expires_at timestamp添加到unavailable中。最终预订是以infinity值存储的,当您向客户建议一个时隙时,您会添加一个期限有限的条目。
现有的排除限制将确保没有任何两个建议的预订可以相互重叠和确定预订。
在添加新预订或建议预订之前,请运行
DELETE FROM unavailable WHERE expires_at < current_timestamp;如果列上有索引,这可能会很快。
https://stackoverflow.com/questions/68084047
复制相似问题