2009-01-03 86 views
11

我正在寻找解决方案以缓存大量数据。c支持磁盘的字典/缓存#

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

以不同的形式关闭问题:

我不需要(或者想支付任何费用)持久性,事务处理,线程安全性等,并且希望使用比列表<>或者字典<>更复杂的东西。

如果我必须写代码,我就关闭保存一切,在临时目录中的文件:

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

在我的情况下指数将是一个int(他们应该是连续的或足够接近)和数据将是一个string,所以我可以逃脱治疗两个POD,宁愿去超轻,做到这一点。

其用法是我有一个3k文件(如文件#1到#3000)的序列总共650MB,并且需要为序列中的每个步骤执行差异。我希望总共大约相同或更多一些,我不想将所有这些都留在记忆中(更大的情况可能会出现在我无法做到的地方)。


许多人为我的问题提出了不同的解决方案。然而,似乎没有人瞄准我的小生态位。我正在研究磁盘备份缓存的原因是因为我期望我目前的使用将占用我的可用地址空间的1/3到1/2。我担心更大的案件将会空间不足。我并不担心踩踏,坚持或复制。我正在寻找的是一个最小的解决方案,它使用最少的代码,最小的使用足迹,最小的内存开销和最小的复杂性。

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

+0

为什么不是文件系统?这是专为... – RedFilter 2009-01-03 00:41:33

+0

如果有人不能指出我已经写好的更好的东西。 – BCS 2009-01-03 00:43:12

+0

不是一种基于磁盘的缓存类型能否击败缓存机制的全部目的? – 2009-01-03 02:06:25

回答

0

尝试寻找在nCache的here也。

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

2

免责声明 - 我对那个我参与产品指向你

我还在对事物的网站方,所以没有大量的信息,但Serial Killer会。对此非常合适。我有使用.Net序列化(可以提供示例)的示例,因此为.Net可序列化对象编写持久映射缓存将很简单。

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

+0

+ +1相关的东西,但我正在寻找更多的超轻型解决方案(理想的情况下,键和值都是POD并以二进制数据形式存储块) – BCS 2009-01-03 02:08:38

+0

SerialKiller是非常该死的光 - 我讨厌你因此解雇它!该接口基本上是从一个密钥(系统生成)到二进制流的映射。 – 2009-01-03 02:14:05

4

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

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

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

0

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

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

,如果你需要它,我可以创造一个二进制下降(仅源代码是availble的现在)

0

我会带嵌入式数据库路径(SQLite的,火鸟),但这里有一些其他的选项:

0

鉴于您最近对该问题所做的修改,我建议您实施您的问题中提到的解决方案,因为您不太可能找到如此简单的解决方案库供您重复使用。