我有一个项目,我必须在从兆字节到兆字节的数据上实现快速搜索、插入和删除操作。我最近一直在研究数据结构并分析它们。具体来说,我想介绍3个案例并提出问题:
数据远远超过内存一次可以处理的数据(样本范围为 10-15 TB)。在这种情况下,我会将数据结构存储在磁盘上。
与系统的内存相比,数据相对较少,因此可以在内存中存储和操作以提高速度。
数据超过可用内存,并假设它小于页面文件中可能的连续数据块的大小。因此,我将数据结构存储在磁盘上的文件中,并对文件进行内存映射。
我得出的结论是:
对于案例 1,我应该使用 B-Tree 来加快访问速度,因为它可以节省磁盘旋转产生的延迟
对于案例 2,我应该使用红黑树来更快地访问,因为数据在内存中,而不是。如果我使用 B 树,在更糟糕的情况下需要扫描的元素会少于我必须做的一个
对于案例3,我对此表示怀疑,磁盘上的页面文件使用本机OS I/O对文件进行操作,那么B树应该是更好的选择还是红黑树?
我想知道以上三个结论哪里对,哪里不对,以及如何在三个不同的情况下提高性能。
我正在使用 C++ 语言,带有一棵红黑树和一棵 B 树,它们都是我从头开始设计的。我正在使用 Boost 库进行文件映射。
更新 1::在 stackoverflow 中阅读这篇文章。得到了一些真正好的见解,这让我觉得我在案例中所做的比较类型可能是错误的。在投票最多的答案http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html中发布了一个链接