我正在寻找一种用于缓存大量数据的解决方案.
相关问题,但针对不同语言:
关于不同术语的问题:
我不需要(或者想要支付任何费用)持久性,事务,线程安全等,并且想要使用比List <>或Dictionary <>更复杂的东西.
如果我必须编写代码,我将把所有内容保存为临时目录中的文件:
string Get(int i)
{
File.ReadAllText(Path.Combine(root,i.ToString());
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,索引将是一个int(并且它们应该是连续的或足够接近的)并且数据将是一个string所以我可以放弃对待两个POD并且宁愿超光并且做到这一点.
用法是我有一系列3k文件(如文件#1到#3000),总计650MB,需要为序列中的每一步做差异.我希望总数大约相同或更多,我不想将所有内容保留在内存中(更大的情况可能会出现在我无法实现的地方).
很多人为我的问题提出了不同的解决方案.然而似乎没有人针对我的小利基.我正在考虑磁盘备份缓存的原因是因为我预计我当前的使用将耗尽我可用地址空间的1/3到1/2.我担心较大的案件会耗尽空间.我并不担心踩踏,持久或复制.我正在寻找的是使用最少代码,最小使用占用空间,最小内存开销和最小复杂性的最小解决方案.
我开始认为我过于乐观了.
我需要一个纯.Net持久散列表/二进制树,功能类似于berkeley-db Java版.
在功能上它应该与DHT类似,如memcached和速度等,但它不必分发.本质上,我正在寻找一个持久的哈希表.
有没有人有任何想法或建议?
类似的问题也在这里:在C#中寻找一个简单的独立持久字典实现
保罗
在我们的程序中,我们将大量数据存储在缓存中.缓存是一个字典.由于大量数据是内存中的,我们计划使用数据库而不是字典.因此,字典中曾经的所有数据都将被移动到数据库中的表中.现在的问题是,字典缓存已在项目的许多地方使用.请建议我一个设计模式,用最少的代码更改有效地用数据库替换字典缓存.
缓存将类似于Dictionary(字符串,MyBusinessObject).字典键将是"Id".MyBusinessObject将拥有其属性中的数据.例如,myBusinessObject.CustomerName,myBusinessObject.CustomerAge.在我的整个项目中,各种模块将在字典中搜索Id(密钥).
c# ×2
.net ×1
berkeley-db ×1
binary-tree ×1
caching ×1
dht ×1
disk-based ×1
hashtable ×1
oop ×1