微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pipe理超过所有可用RAM的数据结构

从我以前的问题: 存储大量索引的数据结构,每个都指向一个集合 ,我得到了一个合适的数据结构的倒数索引实现的答案。 不过,我们很快就可能在我们的Linux服务器上达到128GB的内存限制,所以我想为它做好准备,以防万一,我们再次耗尽内存。

目前,我们获得的转换指数总数高达39亿,大约需要50GB的内存。 需要注意的是,虽然有些人可能会build议数据库系统等, 这是为了实验研究,我们想pipe理自己的数据,而且我们不会使用任何types的数据库系统。

我也被指出什么时候应该使用mmap进行文件访问? 虽然这看起来很有希望,但是我search了一下,看到我需要先为mmap分配一个固定的空间,然后开始放入数据。但是,我的第一个问题(1)是因为我们有更大的数据,我知道我的反转指数会更大,但是我不知道确切的数字,直到我build立它。 (有些数据需要先处理,然后再把这些数据放到倒排索引中),我可以为它分配很多的内存,但是,嘿,我们得到了50GB的内存,现在只有当前的倒排索引。 这导致了第二个问题(2),我们的服务器有很多人在使用,而且有50GB或更多的空间,我们的数据将在硬盘上四处碎片化。

或者,如果我使用文件I / O来pipe理这个并且像分层目录一样制作一个B-Tree? 事情可能会变得丑陋…

所以这一次,我想问一些build议,就像我上面的问题一样,但是这次我需要在RAM和硬盘之间交换一些数据,我们的128 GB内存可能不支持这个。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐