![]() |
2
3
Faircom的C-Tree Plus已经在商业上销售了20多年。别为他们工作等… FairCom 还有 Berkley DB 这是甲骨文收购的,但仍然免费从他们的网站。 |
|
3
3
我自己的实现 http://www.die-schoens.de/prg 许可证是apache。它基于磁盘,映射到共享内存,在那里它也可以做锁定(即多用户),文件格式防止崩溃等。所有上述都可以很容易地关闭(编译或运行,如果你喜欢)。因此,裸骨骼几乎是ansi-c,基本上是缓存在自己的内存中,根本不锁定。包括测试程序。目前,它只处理固定大小的字段,但我正在努力… |
![]() |
4
2
我支持伯克利DB的建议。在被甲骨文收购之前我就用过。它不是一个完整的关系数据库,只是存储键值对。在编写了自己的分页b树实现之后,我们切换到了这一点。这是一个很好的学习体验,但是我们一直在添加特性,直到它只是bdb的(糟糕的)实现版本。 如果你想自己做,这里是我们做的概要。我们使用mmap将页面映射到内存中。每个页面的结构都是基于索引的,因此使用页面起始地址可以访问页面上的任何元素。然后根据需要映射和取消映射页面。我们正在索引多GB的文本文件,当时考虑了很多1GB的主内存。 |
![]() |
5
1
我很确定这不是你正在寻找的解决方案,但你为什么不自己将树存储在一个文件中呢?您只需要一种序列化方法和一个if/of流。 基本上可以这样序列化:转到根目录,在文件中写入“0”分隔符,如“”,根目录中的元素数,然后是所有根元素。对级别1重复“1”,以此类推。只要不更改level keep the level index,空叶可能看起来像2 0。 |
![]() |
7
1
RogueWave是一家软件公司,它有一个很好的Btreeondisk实现,作为其工具++产品的一部分。我从90年代后期就开始使用它了。它的好处是你可以在一个文件中有多个树。但你需要商业执照。 在他们的代码中,他们确实引用了一本叫做“ammeraal”的书(参见 http://home.planet.nl/~ammeraal/algds.html ,Ammeraal,L.(1996),C++中的算法和数据结构。他似乎在磁盘上有一个btree的元素,并且源代码似乎可以在线访问。但我从来没用过。 我目前正在为那些我想发布源代码的项目工作,所以我需要找到一个开源的rogue wave类的替代品。不幸的是,我不想依赖GPL类型的许可证,否则一个解决方案就是简单地使用“libdb”或等效的。我需要一个bsd类型的许可证,很长一段时间我找不到任何合适的。不过,我会看看前面文章中的一些链接。 |
![]() |
Eddiex045 · 比较两个文本文件,匹配项转到一个新文件 2 年前 |
![]() |
NOBUD · 最大堆插入函数实现C++ 2 年前 |
![]() |
riasc · 嵌套贴图结构创建空贴图 6 年前 |
![]() |
Akshay Barpute · cpp中的以下链表程序有什么问题? 6 年前 |
![]() |
Batwoman05 · C++中是否有具有类似函数的树集数据结构 6 年前 |