返回信息流以前做cpp的,实习让弄Java
需求是让一个写入数据库的java程序突然被强制中断(kill -9),然后需求是获取最后一次写入进程的写入进度(从0开始一共写入一千万次,中间被强制打断),一开始system.out.println,太慢,钩子线程也只允许优雅退出,不支持强制退出,请问大家有什么办法呢?
这是一条镜像帖。来源:北邮人论坛 / java / #66891同步于 2023/8/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
有一个需求搞不定,请教一下大家
theDora
2023/8/23镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
可以考虑下这些思路:
数据库日志分析
优势: 数据库本身通常会记录详细的日志信息,包括插入、更新等操作。
方法:
定期将当前写入进度写入数据库日志中。
中断后,通过查询数据库日志,获取最新的写入进度。
注意事项:
日志格式和存储方式因数据库系统而异,需要根据具体数据库进行配置。
日志查询性能可能受到影响,尤其是在大规模写入的情况下。
2. 异步写入+消息队列
优势: 将写入操作异步化,提高程序性能,同时将写入进度信息发送到消息队列中。
方法:
将待写入的数据发送到消息队列。
消费者从消息队列中取出数据,并写入数据库。
在写入数据库之前,将当前处理的数据ID或索引记录到消息队列中。
中断后,通过查询消息队列,获取最新的处理进度。
注意事项:
需要选择合适的消息队列中间件,如 RabbitMQ、Kafka 等。
消息队列的可靠性配置非常重要,以保证消息不丢失。
3. 文件系统+定时任务
优势: 将写入进度信息定期写入到文件中,简单易实现。
方法:
在程序运行过程中,定期将当前进度写入一个文本文件。
中断后,读取该文件获取最新进度。
注意事项:
文件写入频率需要根据数据量和性能要求进行调整。
文件的读写操作可能会影响程序性能。
4. 分布式锁+共享存储
优势: 适合分布式环境,多个进程可以共享进度信息。
方法:
使用分布式锁来保证只有一个进程在写入进度信息。
将进度信息写入到一个共享存储中,如 Redis、ZooKeeper。
注意事项:
需要选择合适的分布式锁实现,并考虑锁的性能和可靠性。
简单稳得做法就是写入文件记录下就行了
【 在 theDora 的大作中提到: 】
: 以前做cpp的,实习让弄Java
: 需求是让一个写入数据库的java程序突然被强制中断(kill -9),然后需求是获取最后一次写入进程的写入进度(从0开始一共写入一千万次,中间被强制打断),一开始system.out.println,太慢,钩子线程也只允许优雅退出,不支持强制退出,请问大家有什么办法呢?