我有一个项目需要处理从几兆字节到几太字节的数据,需要实现快速的搜索、插入和删除操作。最近我一直在研究数据结构并对它们进行分析。具体来说,我想介绍3种情况,并就此提出问题:
数据量远远超过内存容量(样本范围在10-15TB之间)。在这种情况下,我会将数据结构存储在磁盘上。
相对于系统内存,数据量较少,因此可以将其存储在内存中以提高速度。
数据量超过可用内存,但假设它小于分页文件中可能存在的连续数据块的大小。因此,我会将数据结构存储在磁盘上的文件中,并对该文件进行内存映射。
我的结论是:
对于第1种情况,应使用B树以加快访问速度,因为它可以节省磁盘旋转产生的延迟。
对于第2种情况,应使用红黑树以加快访问速度,因为数据位于内存中,需要扫描的元素数目在最坏情况下比使用B树时要少。
对于第3种情况,我不确定,分页文件位于磁盘上,使用本机操作系统I/O来操作文件,所以在这种情况下,是B树还是红黑树更好呢?
我想知道上述三个结论的优缺点,并如何在这三种不同情况下提高性能。
我正在使用C++语言,使用自己从头开始设计的红黑树和B树。我使用Boost库进行文件映射。
更新1:正在阅读stackoverflow中的这篇文章。在其中获得了一些非常有价值的见解,让我感觉我在比较方面所做的工作可能存在问题。最受欢迎答案中发布了一个链接,http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html