【发布时间】:2010-12-03 12:24:21
【问题描述】:
对于可溢出的数据结构,比如队列,有什么好的资源或书籍吗?
当存储大型对象时,它可能会填满所有内存,但如果您可以将队列结构中最常用的项目保留在内存中,其余的则保留在磁盘中(有点像分页)。
同样,这个问题也适用于链表、数组、哈希表等其他结构。
【问题讨论】:
标签: data-structures memory-management disk
对于可溢出的数据结构,比如队列,有什么好的资源或书籍吗?
当存储大型对象时,它可能会填满所有内存,但如果您可以将队列结构中最常用的项目保留在内存中,其余的则保留在磁盘中(有点像分页)。
同样,这个问题也适用于链表、数组、哈希表等其他结构。
【问题讨论】:
标签: data-structures memory-management disk
有Buffer Tree(PDF,0.6 MB):
"... 开发了一个高效的外部优先级队列和 (一维)范围树的批处理动态版本 和段树。”
和
"... 允许我们设计高效的外部存储器算法 以直接的方式从已知的内部算法中提取, 这样算法的所有 I/O 特定部分都是 隐藏在数据结构中。”
这是作为更广泛处理的一部分提到的 在线免费提供的主题 预订“Algorithms and Data Structures for External Memory” 作者:Jeffrey Scott Vitter(PDF,1 MB)。
【讨论】:
您的意思是找到与基于 RAM 的基本数据结构(例如,链表、堆栈、队列、优先级队列等)的有效的基于磁盘的类似物吗?如果是这样,下面的答案可能有帮助,也可能没有帮助。
我不完全确定您要做什么。队列是指FIFO(先进先出)队列还是优先级队列?
对于处理 FIFO 队列和日志记录,也许您可以查看环形缓冲区和日志轮换。
为了处理在 RAM 中缓存数据以最大程度地减少磁盘访问,您最好将其留给操作系统,也可能不会更好。除非您正在开发 Windows 应用程序,否则最好以简单的方式简单地读写文件,因为操作系统应该足够好地执行读写缓存。然而,据我所知,Windows 有可怕的读/写缓存(我可能错了)。
也许查看 Linux 中的 VFS 子系统并研究 http://lxr.linux.no/#linux+v2.6.31/Documentation/filesystems/vfs.txt 会有所帮助,因为(我认为)这是 Linux 中处理缓存的部分。
我不是队列和缓存方面的专家,但我确实知道一些事情。如果您可以提供有关您正在尝试做的事情的更多详细信息,也许有人可以帮助您找到正确的解决方案。
【讨论】:
您正在寻找的可能是 I/O 高效算法的主题。 Google 搜索没有为我找到任何书籍,但这个 course page 包含可能与您相关或不相关的文章列表。
您还应该看看WikiPedia page for B-trees,尤其是B-trees in filesystems 部分。
【讨论】: