我正在寻找一种用于缓存大量数据的解决方案。
相关问题但针对不同语言:
- Python 基于磁盘的字典 https://stackoverflow.com/questions/226693/python-disk-based-dictionary
- 磁盘支持的 STL 容器类? https://stackoverflow.com/questions/149488/disk-backed-stl-container-classes
用不同的术语结束问题:
- 在 C# 中寻找一个简单的独立持久字典实现 https://stackoverflow.com/questions/100235/looking-for-a-simple-standalone-persistant-dictionary-implementation-in-c
我不需要(或不想支付任何费用)持久性、事务、线程安全等,并且想要使用起来并不比 List 或 Dictionary 复杂多少的东西。
如果我必须编写代码,我会将所有内容保存为临时目录中的文件:
string Get(int i)
{
File.ReadAllText(Path.Combine(root,i.ToString());
}
在我的情况下,索引将是int
(并且它们应该是连续的或足够接近的)并且数据将是string
这样我就可以逃避治疗POD http://en.wikipedia.org/wiki/Plain_Old_Data_Structures并且宁愿选择超轻并做到这一点。
用法是我有一个 3k 文件序列(如文件 #1 到 #3000),总计 650MB,并且需要对序列中的每个步骤进行比较。我预计总数大约相同或更多,并且我不想将所有这些都保留在内存中(可能会出现更大的案例,而我却做不到)。
许多人针对我的问题提出了不同的解决方案。然而,似乎没有一个是针对我的小利基市场的。我考虑磁盘支持缓存的原因是因为我预计我当前的使用将使用我的可用地址空间的 1/3 到 1/2。我担心较大的箱子会耗尽空间。我不担心踩踏、持久性或复制。我正在寻找的是一个最小的解决方案,使用最少的代码、最小的使用足迹、最小的内存开销和最小的复杂性。
我开始觉得我过于乐观了。
你真正想要的是 B 树。
这是数据库使用的主要数据结构。
它旨在使您能够根据需要有效地将数据结构的部分与磁盘交换。
我不知道有任何广泛使用的、高质量的 C# 独立 B 树实现。
然而,一种简单的获取方法是使用 Sql Compact 数据库。 Sql Compact 引擎将在进程内运行,因此您不需要运行单独的服务。它会给你一个 B 树,但没有所有令人头痛的事情。您只需使用 SQL 即可访问数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)