0

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

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

我的问题是,我怎样才能以持久的方式维护一个 Guid 列表(可能是 1000-2000 个),这样如果我的进程死了,我会保存它们,以便我可以从中断的地方继续?只要速度快,我愿意尝试任何事情,并且如果服务器重新启动或进程被终止,我仍然会在那里。

有任何想法吗?

4

1 回答 1

0

任何持久性足以在重新启动后幸存下来的东西都必须迟早(最好更早)写入磁盘。

这意味着您已经几乎枚举了您的选择。

您必须问的下一个问题是验证记录是否已被处理的费用是多少,以及最终用户无意中删除跟踪机制的危险级别是多少。

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

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

基于这些因素,我强烈推荐某种数据库。我会对几个不同的数据库进行建模(或研究)以提高性能,看看哪个数据库性价比最高,这应该包括实施、部署和维护的成本。

于 2012-12-31T01:59:00.313 回答