【问题标题】:Is there a muti index container for the harddisk storage rather than memory?是否有用于硬盘存储而不是内存的多索引容器?
【发布时间】:2010-08-19 11:30:25
【问题描述】:

对于硬盘存储,我需要一个基于红黑树的多索引容器(类似于boost::multi_index::multi_index_container)。所有数据都必须存储在硬盘而不是内存中。

是否存在满足所述条件的开源​​容器?

注意。我用C++

【问题讨论】:

    标签: c++ boost red-black-tree multi-index hard-drive


    【解决方案1】:

    如果您有内存解决方案,您可以使用内存映射文件和自定义分配器来实现持久存储。

    【讨论】:

    • 这不是真的。首先,内存解决方案在碎片方面是稳定的,因为操作系统中存在内存页面。文件存储中的动态内存分配和释放有很多问题。其次,在 32 位系统上有 2Gb 的限制。
    • @alexey 任何基于文件的解决方案都容易出现碎片,但合适的自定义分配器可以将其最小化。如果您期望更大的数据集,那么 2GB 的限制可能是个问题。您可以使用多个映射文件,但这可能会变得过于复杂而无法实现。这个问题并没有说您在 32 位系统上需要超过 2GB 的空间。也许它暗示了对文件存储的需求,但我不是那样理解的。 (对不起)。
    • 另一个问题是如何将现有文件与数据附加到多索引容器中。
    【解决方案2】:

    恐怕我什么都不知道。

    对于硬盘存储,我只能推荐查看STXXL,它提出了适用于只能存储在磁盘上的数据的 STL 容器和算法。他们已经实现了很多东西来实现更流畅的操作,主要是通过尽可能多地缓存在内存中并尽可能延迟磁盘访问。

    现在这不会给你一个多索引,但至少你会有一个 STL :)

    然后,如果您确定,您可以移植多索引以使用 STXXL 提供的功能:它们已将 IO 访问/内存缓存与容器本身解除关联。

    或者您可以简单地根据他们的 STL 兼容容器编写您需要的内容。

    【讨论】:

      【解决方案3】:

      SQLite 怎么样?它可以使用磁盘作为后备存储,并支持数据的多个索引,就像 Boost Multi Index 一样。

      【讨论】:

        猜你喜欢
        • 2018-08-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 2015-09-09
        相关资源
        最近更新 更多