编程语言
首页 > 编程语言> > java-可变大小键的B树实现

java-可变大小键的B树实现

作者:互联网

我正在寻求为“一次性使用”索引实现B树(在Java中),其中插入了几百万个键,然后对每个键进行少量查询.密钥是< = 40字节的ascii字符串,并且关联的数据始终占用6个字节.选择B树结构是因为我的内存预算不允许我将整个临时索引保留在内存中. 我的问题是有关选择分支因子并在磁盘上存储节点的实际细节.在我看来,有两种方法:
>一个节点始终位于一个块内.通过选择分支因子k来实现,使得即使在最坏的情况下密钥长度,密钥,数据和控制结构的存储需求也≤系统块大小. k可能很低,并且在大多数情况下,节点将有很多空闲空间.
>一个节点可以存储在多个块中.分支因子的选择与密钥大小无关.加载单个节点可能需要加载多个块.

问题如下:

>第二种方法是通常用于可变长度密钥吗?还是我错过了一些完全不同的方法?
>给定我的用例,您会推荐其他整体解决方案吗?

最后,我应该知道我知道jdbm3项目,并正在考虑使用它.无论是作为学习练习,还是尝试针对具体情况的优化是否都能产生更好的性能,都将尝试实施自己的方法.

编辑:目前正在阅读有关SB树的信息:

> S(b)-Trees
> Algorithms and Data Structures for External Memory

解决方法:

我在这里缺少选项C:

>至少两个元组始终装入一个块,因此将相应地选择块大小.块中填充了尽可能多的键/值对,这意味着分支因子是可变的.如果块大小远大于(键,值)元组的平均大小,那么浪费的空间将非常小.由于光盘的最佳IO大小通常为4k或更大,并且元组的最大大小为46,因此这种情况自动适用.

对于所有选项,您都有一些变体:B *或B树(请参阅Wikipedia).

标签:b-tree,data-structures,java
来源: https://codeday.me/bug/20191201/2082999.html