【问题标题】:How to save and load a giant hash-table to-n-fro from disk?如何从磁盘保存和加载一个巨大的哈希表来回?
【发布时间】:2013-03-02 08:44:23
【问题描述】:

出于学习目的,我正在尝试为大量收藏编写搜索引擎。我从自己的直觉开始。然后我研究并最终得出了一个可行的模型。

我正在构建一个巨大的哈希表来保存我的集合中的所有术语。从集合中构建它是非常昂贵的。一旦我计算了表,我想将它保存到磁盘,这样每当我想在我的程序中访问这个哈希表时,我就可以从磁盘再次加载它。

是否有任何标准的方法来做到这一点,还是我必须发明自己的文件格式和技巧才能做到这一点?

注意:has-table仅用于存储所有term出现,我打算将主要排名数据存储在一个postings文件中,并将其指针设置在hash-table的对应term中。

我在 C 中工作。

【问题讨论】:

  • 将其存储为键值对列表?不确定这是否是您要找的。但是,通常计算哈希值很便宜,因此从这样的列表中重建它是合理的。
  • 数据库和其他面向磁盘的存储使用 b+ 树。
  • @FatalError has-table 仅用于存储所有术语出现,我打算将主要排名数据存储在一个帖子文件中,并将其指针设置在哈希表中的相应术语中。跨度>
  • 您使用什么操作系统?你试过mmap吗?
  • @Eddy_Em 我在 32 位 Ubuntu 上。 mmap 没有最大可寻址空间 4GB 的限制吗?我有一个相关的问题stackoverflow.com/questions/15388408/… 如果你有时间并且对 mmap() 和将 DS 保存到磁盘有更多了解,我想和你谈谈

标签: c search data-structures hash indexing


【解决方案1】:

BDB 是一个用于有效管理平面文件数据库的库。特别是支持哈希表格式。如果需要有序访问,也可以使用 B 树。

【讨论】:

  • 谢谢@phs。我找到了tpleet,现在找到了BDB。我正在尝试找出在搜索引擎索引方案中哪个是最好的。
  • 顺便说一句,我专业地维护了一个搜索引擎(opensiteexplorer.org);我们广泛使用 B-Tree BDB。
  • 我很幸运能找到你!我目前正在研究搜索引擎主题,因此我还有一些问题。如果你没有时间,你能来这个聊天室groups.gaglers.com/r/ENeO。我不会吃你太多的时间!
  • 谢谢 phs!聊天真的帮助了我。使用 BDB 会破坏我自己实现搜索引擎的目的。而且我还试图在没有数据库连接和其他东西的情况下让 C 语言中的所有内容都变得轻松。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2010-10-04
  • 2019-07-22
  • 2012-11-13
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多