用于缓存应用程序的MemoryMappedFile和b-tree

这只是一个想法,我还没有任何代码,我需要一些设计建议。我将使用c#中的MemoryMappedFile实现一个缓存(在第一个实例中不分发)。我认为将b树作为不定结构会很好,但这也是值得商榷的。 所以问题是:

  • 当unlaying支持是内存映射文件时,B-tree是否是用于快速搜索项目的好策略?
  • 我们对内存映射文件有什么提示和技巧?视图可以大到多少,当它太小或太大时会有什么缺点?
  • 多线程考虑:我们如何处理内存映射文件和并发?缓存应该被客户高度重视,什么策略更适合拥有高效的东西?

当@Internal Server Error询问时,我将问题与此集成: 键将是一个字符串,大约64个字符最大len。数据将是一个大约1024字节长的字节[],但考虑平均值为128字节或更好:我想要缓存的是OR/M实体,让我们考虑像BSOn序列化器这样的字节序列化实体有多长。

1
key将是一个字符串,考虑64个字符。数据可以是一个字节数组:一个序列化的实体,可能是4到1k字节。
额外 作者 Felice Pollano,
@sehe你是对的,我知道mongodb,但我想在我的项目中嵌入一些东西
额外 作者 Felice Pollano,
为什么要自己动手? couchdb,memcached,mongodb;显然mongodb
额外 作者 sehe,
您正在缓存的数据类型是什么?什么类型的钥匙?我们谈论了多少数据?
额外 作者 500 - Internal Server Error,

1 答案

  • B-Tree很好(带有内存映射文件),但如果文件并不总是完全保存在常驻内存中,那么页面对齐的B + Tree要好得多。 另见
  • 内存映射文件的技巧是使用64位架构,以便您可以将整个文件映射到内存中,否则您只需要映射部件和缓存的 read s可能比 mmap s更快。
  • 在共享内存上尝试CAS(比较和交换)。 另见
1
额外
非常感谢,也很好的参考。
额外 作者 Felice Pollano,
也许在 nosql-database.org 上有一些C#-pish。或者某些C项目可以作为参考。
额外 作者 ArtemGr,