.NET - 一个快速轻量级持久化键值存储

4
我正在寻找一个.NET的持久化键值存储。要求如下:
  • 该存储用于由字符串标识并具有多个可选(命名)属性和其值仅为字节数组的对象。对于SQL解决方案,我将其建模为一个字符串-> id表,以及几个id-> blob表。
  • 预期数据量为几兆字节(超过10 Mb目前不太可能,但扩展到100 Mb会是一个不错的奖励)
  • 轻量级 - 最好是单组件,绝对不包含外部应用
  • 读取频率比写入频率高,至少高出100倍。
  • 快速的读/写访问 - 我期望在内存中存储,并延迟对数据的更新进行惰性写入; 我可以定期自己生成异步写入,如果存储可以实现则得到额外的加分。
  • 原子I / O - 如果在写入过程中终止进程,则数据库不应破坏; 否则数据不是关键的,即不需要额外的冗余。

目前我认为SQLite会在这里起作用; 但它似乎有点过头了 - 我只需要键值存储,而不是完整的SQL支持。我还听说过bdb和libdb-dotnet绑定 - 它似乎更轻量级,但我不知道性能/一致性特征。

有人能在这里推荐一些东西吗?欢迎提供额外的参考(即,如果.NET Framework中有可以完成工作的内容,那将是很棒的),以及与SQLite或libdb-dotnet(或bdb总体)或自制解决方案的经验,如果是无痛苦的。


听起来对我来说使用任何类型的数据库都会过度,只有10mb,为什么不一次性从磁盘读取/写入所有内容?(这不像是占用了很多内存) - Doggett
@Doggett,如果所提出的应用程序不是微不足道的话,那听起来就像是重新发明数据库。 - driis
@Doggett,问题在于每次更新都写入完整的数据库会很慢,并且没有单一的刷新点(即我不能在应用程序退出时写入完整的数据库,因为应用程序可能会被提前终止);我必须支持部分刷新,并使它们具有原子性 - 我想这是唯一比较棘手的事情。 - zeuxcg
你查过ZoneTree了吗?https://github.com/koculu/ZoneTree它比Facebook的RocksDB快几倍,比SQLite快数百倍。 - Ahmed Yasin Koculu
1个回答

1

也许可以看看http://ravendb.net/。它将JSON文档存储在键值存储中,但具有出色的.NET对象支持。

根据您对需求的解释,您还可以考虑仅利用其托管存储引擎“Raven.Munin”,该引擎是单个程序集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接