从我之前的问题: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 可能无法容纳这个。