2

从我之前的问题:Data structure for storage large number of indices, each pointing to a set中,我得到了关于反转索引实现的合适数据结构的答案。但是,问题是,我们的 Linux 服务器可能很快就会达到 128 GB RAM 的限制,所以我想做好准备,以防我们再次用完它的内存。

现在,我们在 invert 索引中的索引总数高达 39 亿,这需要大约 50 GB 的 RAM。请注意,虽然有些人可能会建议使用数据库系统等,但这是用于实验研究,我们希望管理自己的数据,我们不会使用任何类型的数据库系统。

我也被指出什么时候应该使用 mmap 进行文件访问?虽然这看起来很有希望,但我四处搜索,发现我需要先为 mmap 分配一个固定空间,然后开始放入数据。然而,我的第一个问题 (1) 是因为我们有更大的数据,我知道我的反转索引会更大,但在我构建它之前我不知道确切的数字。(在将这些数据推送到反向索引之前需要先处理一些数据)我可以为它分配很多内存,但是嘿,我们已经获得了 50 GB 的 RAM 和当前的反向索引。这导致了第二个问题(2),我们的服务器有很多人在使用,并且有 50 GB 或更多的空间,我们的数据将在硬盘中四处分散。

或者,如果我使用文件 I/O 来管理它并制作一个像分层目录一样的 B 树呢?事情可能会变得丑陋...

所以这一次,我想征求一些建议,就像我之前的问题一样,但这一次,我需要在 RAM 和硬盘之间交换一些数据,我们的 128 GB RAM 可能无法容纳这个。

4

1 回答 1

1

如果可能的话,我会为系统添加更多交换空间并让内核负责交换。

如果不可能,我会考虑通过索引键将数据聚集在块中,而不是在访问时压缩/解压缩内存中的块,或者将它们交换到磁盘。

于 2013-03-02T00:31:39.547 回答