持久化处理过的记录

本文关键字:记录 处理 持久化 | 更新日期: 2023-09-27 17:49:57

我有一个c#进程,它使用TPL对队列进行并行处理。在处理完每条记录之后,我想为处理过的每条记录ID建立一个物理记录,这样如果处理失败或被中断,我就可以确保不会再次处理该记录。记录必须只处理一次。

我已经尝试序列化记录id到一个简单的文本文件和一个Sqlite表。在这两种情况下,保存这些小记录id (Guid)的时间占记录本身总处理时间的50%。我甚至尝试过使用一个开放的Sqlite连接和一个参数化的插入查询来做插入,所以我没有打开/关闭数据库文件,它没有更好。

我的问题是,我如何以持久的方式维护Guid列表(可能有1000-2000个),这样如果我的进程死亡,我将保存它们,以便我可以从我离开的地方捡起?我愿意尝试任何东西,只要它是快速的,如果服务器重新启动或进程被杀死,它仍然会在那里。

任何想法?

持久化处理过的记录

任何足以在重新启动后存活下来的持久文件迟早都必须写入磁盘(最好早一点)。

这意味着你几乎已经列举了你的选择。

你要问的下一个问题是验证记录是否已经被处理的费用是多少,以及最终用户无意中删除跟踪机制的危险程度是什么。

如果你只是把信息写入一个文本文件,它应该是一个快速的写入,但一个缓慢的读取(除非你缓存信息),用户将删除文件的可能性是相当高的。

如果您使用任何类型的数据库,写操作应该仍然相当快,检索应该比文本文件快,并且用户删除存储机制的可能性要低得多。

基于这些因素,我强烈建议使用某种数据库。我将对几个不同的数据库进行建模(或研究),看看哪个数据库的性能最好,这应该包括实现、部署和维护的成本。