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

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

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

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

【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/

定时任务不间断扫描,到了截止时间没有通过的修改预约状态.
或者通过状态只有通过和未通过默认都是未通过.
但是在截止时间之前的都显示为审核中,这个用sql都能直接查出来

1.截至时间过期自动改变,大致方案几种 由简单到难
· 采用Redis的过期key
· 采用定时器组件比如Quartz
· 采用队列 用TTL+死信监听
2.同时预约不堵塞,可以考虑接口异步处理,开多线程

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/367835
  • 除此之外, 这篇博客: javaweb网上购物系统,jsp网页线上购物,mysql(源码+报告)中的   随着计算机技术的发展和网络人口的增加,网络世界也越来越广博,越来越丰富,网上商城已经成为网上购物的一股潮流。人们对于互联网技术的要求已不单单是浏览一下网站网页,收发电子邮件,日益忙碌的人们开始追求足不出户就能买到心仪的商品,是越来越多的上网爱好者实现购物的一种方式。对于企业来讲,无论是企业之间(B to B),还是企业和客户之间(B to C)的交易,如果能够实现网上交易将大大提高交易速度节约成本。但是对网络的及时、一对一、跨时间、跨 空间等特性,并没有充分加以利用。在这种形势下,传统的依靠管理人员人工工作传递信息和数据的管理方式就无法满足企业日益增长的业务需求了。因而开发了这样一个具有前后台的网上购物系统,以满足购物者和企业的需求。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读: