这是停车场面试问题的一部分,要求候选人设计停车场系统。停车场的设计实体是一个值得讨论的问题。但我被困在我们必须为车辆分配停车位的部分。
假设我们正在使用外部数据存储来实现停车场问题。并且有很多并发请求,请求停车位。最基本的实现是,
为每个停车位创建单独的数据库行,列可用性为真/假。
每当车辆到来时,找到一个可用的插槽(假设插槽 ID X)
使用乐观锁定将 DB 的可用性更新为 false(即,如果 slotid=X 且可用性 =false 则更新)
上述方法在高并发场景中效果不佳,因为可能会为多个车辆分配相同的槽位,并且步骤 3 对于所有这些车辆都会失败,我们必须从步骤 2 再次重试。
为了最佳地处理这个问题,我应该合并步骤 2、3 并将分配卸载到数据库本身。新流程应如下所示
- 为每个停车位创建单独的数据库行,列可用性为真/假。
- 每当车辆到来时,都会触发 SQL 查询来查找行并将可用性更新为 false。并将slotid归还给车辆?
在 SQl DB 中可以这样做吗?是否有其他方法来实现此功能。