c#的磁盘支持字典/缓存

我正在寻找一种用于缓存大量数据的解决方案。

相关问题,但针对不同语言:

  • Python基于磁盘的词典
  • 磁盘支持的STL容器类?

关于不同术语的问题:

  • 在C#中寻找一个简单的独立持久字典实现

我不需要(或想要支付任何费用)持久性,事务,线程安全等,并且想要使用比List 或Dictionary 更复杂的东西。

如果我必须编写代码,我将把所有内容保存为临时目录中的文件:

string Get(int i) { File.ReadAllText(Path.Combine(root,i.ToString()); } 

在我的情况下,索引将是一个int (并且它们应该是连续的或足够接近的)并且数据将是一个string所以我可以放弃对待POD并且宁愿超光并且做到这一点。

用法是我有一系列3k文件(如文件#1到#3000),共计650MB,需要为序列中的每一步做差异。 我希望总数大约相同或更多,我不想将所有内容保留在内存中(更大的情况可能会出现在我无法实现的地方)。


很多人为我的问题提出了不同的解决方案。 然而似乎没有人针对我的小利基。 我正在考虑磁盘备份缓存的原因是因为我期望我当前的使用将耗尽我可用地址空间的1/3到1/2。 我担心较大的病例会耗尽空间。 我并不担心踩踏,持久或复制。 我正在寻找的是使用最少代码,最小使用占用量,最小内存开销和最小复杂性的最小解决方案。

我开始认为我过于乐观了。

你真正想要的是B树。 这是数据库使用的主要数据结构。 它旨在使您能够根据需要有效地将数据结构的某些部分与磁盘交换。

我不知道C#的任何广泛使用的高质量独立B-Tree实现。

但是,获得一个的简单方法是使用Sql Compact数据库。 Sql Compact引擎将在进程中运行,因此您不需要运行单独的服务。 它会给你一棵b树,但没有头疼。 您可以使用SQL来访问数据。

免责声明 – 我即将为您指出我参与的产品。

我仍然在网站方面工作,所以没有太多的信息,但Serial Killer将非常适合这一点。 我有使用.Net序列化的示例(可以提供示例),因此为.Net可序列化对象编写持久映射缓存将是微不足道的。

足够无耻的自我推销 – 如果有兴趣,请使用网站上的联系链接。

这与我的问题非常相似

在C#中寻找一个简单的独立持久字典实现

我不认为一个完全适合你想要的库,也许是它在github上新项目的时间。

这是.net的B-Tree实现: http : //bplusdotnet.sourceforge.net/

您可以将MS应用程序块与基于磁盘的缓存解决方案一起使用

尝试在这里看看NCache。

我不隶属于这家公司。 我刚下载并测试了他们的免费快递版本。

我已经将EhCache Java应用程序部分弹出到.NET。分布式缓存尚未实现,但在单个节点上,所有原始UnitTests都通过了。 完整的OpenSource:

http://sourceforge.net/projects/thecache/

如果需要,我可以创建二进制删除(现在只提供源代码)

我将采用嵌入式DB路由(SQLite,Firebird),但这里有一些其他选项:

  • Berkeley DB :不是您的标准SQL嵌入式数据库,但似乎是这类任务的正确选择,尽管不能从.net轻松使用
  • db4o :一个OODB,非常简单的界面

我推荐MS的企业库中的缓存应用程序块。 这也是建议的,但链接指向企业库的数据访问部分的文章。

以下是缓存应用程序块的链接:

http://msdn.microsoft.com/en-us/library/cc309502.aspx

具体而言,您将需要创建一个新的后备存储(如果没有持久存储到磁盘):

http://msdn.microsoft.com/en-us/library/cc309121.aspx

鉴于您最近对此问题进行了编辑,我建议您实施问题中提到的解决方案,因为您不太可能在库中找到这样一个天真的解决方案供您重复使用。