对于硬盘存储的情况,我需要一个基于红黑树(类似boost::multi_index::multi_index_container
)的多指数容器。所有数据必须存储在硬盘而不是内存中。是否有一个用于硬盘存储而不是内存的多索引容器?
是否有一个开放源代码的容器,使得所描述的条件成立?
注意。我使用C++
。
对于硬盘存储的情况,我需要一个基于红黑树(类似boost::multi_index::multi_index_container
)的多指数容器。所有数据必须存储在硬盘而不是内存中。是否有一个用于硬盘存储而不是内存的多索引容器?
是否有一个开放源代码的容器,使得所描述的条件成立?
注意。我使用C++
。
如果您有内存中的解决方案,则可以使用内存映射文件和自定义分配器来实现持久性存储。
恐怕我不知道。
对于硬盘存储,我只能推荐看一下STXXL,它建议STL容器和算法适用于只适合磁盘的数据。他们已经实现了许多功能以实现更平滑的操作,主要是尽可能地缓存在内存中,并尽可能延迟磁盘访问。
现在不会让你一个多指标,但至少你将有一个STL :)
然后,如果你有决心,你可以端口多指数使用由STXXL提供的设施:它们已经解密了容器本身的IO访问/内存缓存。
或者你可以简单地根据他们的STL兼容容器写出你需要的东西。
SQLite怎么样?它可以使用磁盘作为后备存储,并支持多个索引数据,如Boost Multi Index所做的那样。
这是不正确的。首先,内存中的解决方案对于碎片而言是稳定的,因为操作系统中存在内存页面。动态内存分配和文件存储中的释放有很多问题。其次在32位系统上有2GB的限制。 – 2010-08-19 12:15:00
@alexey任何基于文件的解决方案都容易出现碎片,但合适的自定义分配器可以将其最小化。 如果您希望有一个更大的数据集,则2GB的限制可能会成为问题。您可以使用多个映射文件,但这可能会变得太复杂而不可行。 这个问题并没有说你需要在32位系统上超过2GB。也许这是由文件存储的需要所暗示的,但我并不这样理解。 (抱歉)。 – 2010-08-19 12:28:00
另一个问题是如何将现有文件与数据附加到多索引容器。 – 2010-08-19 12:39:19