【问题标题】:Memory mapped - partially disk based algorithms内存映射 - 部分基于磁盘的算法
【发布时间】:2010-12-03 12:24:21
【问题描述】:

对于可溢出的数据结构,比如队列,有什么好的资源或书籍吗?

当存储大型对象时,它可能会填满所有内存,但如果您可以将队列结构中最常用的项目保留在内存中,其余的则保留在磁盘中(有点像分页)。

同样,这个问题也适用于链表、数组、哈希表等其他结构。

【问题讨论】:

    标签: data-structures memory-management disk


    【解决方案1】:

    有Buffer Tree(PDF,0.6 MB):

    "... 开发了一个高效的外部优先级队列和 (一维)范围树的批处理动态版本 和段树。”

    和

    "... 允许我们设计高效的外部存储器算法 以直接的方式从已知的内部算法中提取, 这样算法的所有 I/O 特定部分都是 隐藏在数据结构中。”

    这是作为更广泛处理的一部分提到的 在线免费提供的主题 预订“Algorithms and Data Structures for External Memory” 作者:Jeffrey Scott Vitter(PDF,1 MB)。

    【讨论】:

    • +1 参考好书,我以前不知道
    【解决方案2】:

    您的意思是找到与基于 RAM 的基本数据结构(例如,链表、堆栈、队列、优先级队列等)的有效的基于磁盘的类似物吗?如果是这样,下面的答案可能有帮助,也可能没有帮助。


    我不完全确定您要做什么。队列是指FIFO(先进先出)队列还是优先级队列?

    对于处理 FIFO 队列和日志记录,也许您可​​以查看环形缓冲区和日志轮换。

    为了处理在 RAM 中缓存数据以最大程度地减少磁盘访问,您最好将其留给操作系统,也可能不会更好。除非您正在开发 Windows 应用程序,否则最好以简单的方式简单地读写文件,因为操作系统应该足够好地执行读写缓存。然而,据我所知,Windows 有可怕的读/写缓存(我可能错了)。

    也许查看 Linux 中的 VFS 子系统并研究 http://lxr.linux.no/#linux+v2.6.31/Documentation/filesystems/vfs.txt 会有所帮助,因为(我认为)这是 Linux 中处理缓存的部分。

    我不是队列和缓存方面的专家,但我确实知道一些事情。如果您可以提供有关您正在尝试做的事情的更多详细信息,也许有人可以帮助您找到正确的解决方案。

    【讨论】:

      【解决方案3】:

      您正在寻找的可能是 I/O 高效算法的主题。 Google 搜索没有为我找到任何书籍,但这个 course page 包含可能与您相关或不相关的文章列表。

      您还应该看看WikiPedia page for B-trees,尤其是B-trees in filesystems 部分。

      【讨论】:

        猜你喜欢
        • 2010-10-17
        • 2011-10-26
        • 1970-01-01
        • 2015-10-23
        • 2011-01-31
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多