element_it 2023-03-31 12:30 采纳率: 100%
浏览 32
已结题

关于#java#的问题:A端假如100人同时发起预约,B端管理员审核预约,B端管理员点击三次按钮就可以更新数据库预约状态,设计在预约截止时间自动改变状态为未通过

多人预约,并记录每个人的预约状态,
预约状态有审核中,已通过,未通过。
A端假如100人同时发起预约,B端管理员审核预约,可能通过的也就两三个人,
B端管理员点击三次按钮就可以更新数据库预约状态,
其它97人不想依次点击了,设计在预约截止时间自动改变状态为未通过。
那么如何改变未通过人的状态?是循环update数据库?
如果不是,那么有什么更优的解决方案?

另外发起预约时如何保证不拥堵,应该选用哪些技术

  • 写回答

4条回答 默认 最新

  • 语言-逆行者 2023-03-31 12:48
    关注

    针对您的问题,我尝试从以下几个方面给出一些可能的解决方案:

    【1】如何改变未通过人的状态?是循环update数据库?
    一种可能的方法是,在数据库中为每个预约记录增加一个截止时间字段,表示该预约的有效期限。当管理员审核通过一个预约时,就更新该预约的状态为已通过,并将其截止时间设置为一个较长的时间(比如一年)。当管理员审核拒绝一个预约时,就更新该预约的状态为未通过,并将其截止时间设置为当前时间。当用户取消一个预约时,也同样更新其状态和截止时间。

    这样,我们就可以利用数据库的定时任务功能,定期执行一个SQL语句,将所有状态为审核中且截止时间小于当前时间的预约记录,批量更新为未通过。这样就避免了循环update数据库,提高了效率和准确性。

    例如,我们可以使用MySQL的事件调度器功能,创建一个每天执行一次的事件,执行以下SQL语句:

    
    UPDATE reservation SET status = '未通过' WHERE status = '审核中' AND deadline < NOW();
    
    

    【2】如果不是,那么有什么更优的解决方案?
    除了上述方法外,还有一些其他的可能的解决方案,比如:

    【3】使用消息队列或者消息总线,将审核结果作为消息发送给所有相关的用户和系统。这样可以实现异步通知和解耦合,提高系统的可扩展性和可靠性。

    【4】使用缓存或者内存数据库,将预约状态和截止时间存储在内存中,减少对数据库的访问压力。这样可以提高系统的性能和响应速度。

    【5】使用触发器或者存储过程,在数据库层面实现预约状态的自动更新。这样可以减少应用层面的逻辑复杂度和代码量。

    【6】发起预约时如何保证不拥堵,应该选用哪些技术

    发起预约时可能会遇到高并发和资源竞争的问题,导致系统拥堵或者出现错误。为了保证系统的稳定性和正确性,我们应该选用一些技术来解决这些问题,比如:

    (1)使用分布式锁或者乐观锁,保证对同一个资源的并发访问是串行化或者无冲突的。这样可以避免数据不一致或者丢失的问题。
    (2)使用限流或者熔断机制,控制系统的访问量和负载,防止系统过载或者崩溃。这样可以提高系统的可用性和容错性。
    (3)使用负载均衡或者集群部署,将请求分发到多个服务器或者节点上,实现系统的水平扩展和负载均衡。这样可以提高系统的吞吐量和并发能力。
    您可以参考以下链接来了解更多关于预约系统设计的原理和示例:

    https://www.cnblogs/

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂