我有一个c#进程,它使用TPL并行处理队列。在处理完每条记录之后,我想建立一个处理过的每个记录ID的物理记录,这样如果进程失败或被中断,我可以确保不会再次处理该记录。 必须只处理一次记录。
我尝试将记录ID序列化为简单的文本文件和Sqlite表。在这两种情况下,保存这些小记录ID(Guid)的时间占记录本身总处理时间的50%。我甚至尝试使用一个开放的Sqlite连接和一个parameritized插入查询来插入,所以我不打开/关闭数据库文件,它没有更好。
我的问题是,如何以持续的方式维护一个Guid列表(可能是1000-2000个),这样如果我的进程死了,我会保存它们以便我可以从我离开的地方拿起它?我愿意尝试任何东西,只要速度很快,如果服务器重新启动或进程被杀死,我仍然会在那里。
有什么想法吗?
答案 0 :(得分:0)
任何足以在重新启动后存活的东西都必须迟早写入磁盘(最好是更快)。
这意味着您已经几乎列举了您的选择。
您需要问的下一个问题是验证记录是否已经处理的费用是多少以及最终用户无意中删除跟踪机制的危险程度是什么。
如果您只是将信息写入文本文件,它应该是快速写入,但是读取速度慢(除非您缓存信息)以及用户删除文件的可能性相当高。
如果使用任何类型的数据库,写入仍然应该相当快,并且检索应该比文本文件的检索更快,并且用户删除存储机制的可能性要低得多。
基于这些因素,我强烈推荐某种数据库。我会建模(或研究)几个不同的数据库以获得性能,以确定哪些可以提供最好的效果,包括实施,部署和维护成本。