【问题标题】:File system based B+ Tree implementation in c#c#中基于文件系统的B+树实现
【发布时间】:2011-04-02 12:06:59
【问题描述】:

c#(开源)中是否有任何基于文件系统的 B+ 树实现。我找到了一些项目,但这些不是基于文件(磁盘)的实现。我正在专门寻找基于文件系统的 B+ 树。

【问题讨论】:

  • 什么...过于本地化了..?来吧伙计们

标签: c# b-tree


【解决方案1】:

更新:

我已经添加了一些benchmarks of managed B-Tree implementations 供您欣赏,如果您正在研究这类事情。

BplusDotNet “...已知在删除时有些错误”

我发现情况正好相反,RaptorDB 1.6 正在破坏状态,而 BplusDotNet 1.0.2082.16942 似乎运行良好。

原文:

为了完整起见,我将在此处添加我自己的实现。

【讨论】:

  • 我可以确认 BPlusTree 在通过自定义 ISerializer 序列化程序读取时确实损坏了数据。实体内置了基于 SHA256 的 HMAC 用于自检,并且会失败 1:50K 次(IO 流将过早关闭)。性能也会下降,所以读取最后 10% 的实体比读取前 10% 慢得多。当在 BPlusTree 之外对 T => byte[] 执行相同的序列化时,问题就消失了,BPlusTree 使用 PrimitiveSerializer.Bytes 仅使用 byte[] 而不是自定义实体。自从 NuGet 在 1.5 年内没有发布以来,项目可能已经死了
  • @DeepSpace101 你能分享你的 ISerializer 实现吗?我怀疑你的问题可能在那里。 BPlusTree 目前在多个商业产品中使用,并且已经证明是可靠的,正如您所指出的那样,您使用 byte[] 和内置的序列化程序。至于项目死了,我当然可以理解这种印象,因为我很长时间没有对其进行任何重大改进。我很乐意为您和其他人提供帮助,只需给我发送电子邮件 roger @我的用户名即可。
  • 会向您发送电子邮件,但根本原因是序列化程序有一个约定,即流结束 = 对象结束。该约定/假设在T ReadFrom(Stream stream) 接口处被打破,导致要读取更多字节(超出“结束”),从而杀死加密校验和。
  • @DeepSpace101 我也很怀疑,我也被它咬过。至少这里记录了下一个人;)
  • 另外,它只会发生 1:50K 次(与每次相比),因为只有在磁盘被读取时才会发生 ReadFrom。由于我们正在写入 => 读取(背靠背),因此读取发生在缓存之外。但是,如果磁盘被击中一次(在应用程序级别为 1:50K 次),我们就会看到该错误。我们的解决方法是在 BPlusTree 库之外处理序列化,并在 BPlusTree 中使用 byte[] 接口。
【解决方案2】:

http://bplusdotnet.sourceforge.net/ 但众所周知,这个在删除时有些错误。

另一个似乎运行良好的:

http://www.codeproject.com/KB/database/RaptorDB.aspx

RaptorDB 允许您使用 b+ 树或哈希索引来存储键/值。您可以选择何时创建文件。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2011-01-12
    • 2015-04-16
    • 1970-01-01
    • 2010-12-15
    • 2015-11-06
    • 2011-02-14
    • 2012-11-07
    • 2012-11-19
    相关资源
    最近更新 更多