BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #66891同步于 2023/8/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

有一个需求搞不定,请教一下大家

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