避免跳过记录的有效方法

问题描述 投票:0回答:1

当前场景:数据库中大约有 430 万条记录,我必须逐条记录地将文件迁移到外部文件。在迁移过程中,数据将以某种方式进行操作(无法指定)。逐条记录的原因是由于程序的功能,即使到达文件末尾,它也会继续运行并等待添加新记录。

有没有办法在传输过程中防止重复,我还添加了一个故障保护,以防程序中途崩溃,以便它可以从中断处恢复。仅当记录成功保存时,才会满足保存最后位置的条件。

作为示例逻辑:


|记录1 | <---- Success

|记录2 | <---- Success

|记录3 | <---- Success

|记录 4 | <---- Pending

|记录 5 | <---- Pending

|记录 6 | <---- Success (Newest)

挂起的原因可能会发生,因为它可能是一个更大的记录并且需要一些时间。

假设程序在记录 6 之后崩溃并将最后知道的位置保存在记录 6 中,我如何检查在崩溃之前是否错过了记录 4、5 或任意数量的记录。恢复后节目将从记录6开始继续,完全错过之前错过的内容。

想请教Stackoverflow的大佬们有没有一个理论上的解决方案来解决这个问题。请记住,如果程序崩溃,内存中的所有内容都会被清除。但我会将最后一次成功的读取保存在另一个文件中,这样就可以避免崩溃。

ps。这不是 sql,所以我尝试更手动的方法。

database queue theory vsam
1个回答
0
投票

如果您担心潜在的崩溃,我最近在类似用例中使用的一个好方法是维护一个日志文件(例如records_processed),在其中记录成功迁移后每条记录的唯一ID。如果您的程序在崩溃后启动,请检查该日志中的最后几个条目以了解崩溃之前的位置。执行此操作时,您可以检查一些以前的记录,并确保没有因崩溃时“待处理”而错过任何记录。为了避免重复到目的地,只需根据日志文件检查记录的 ID。如果可能的话,为了获得更好的效率,请将最近的记录 ID 保留在内存中,这样您就不必总是读取文件。有时/定期,您可能希望将此内存列表保存到单独的其他文件中,有时将其与主日志合并以保持干净。通过这种方法,即使发生碰撞,也不会出现 1. 遗留和 2. 重复的记录。我希望这有帮助,并且我正确理解了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.