随机访问容器不适合内存?

Fra*_*ank 6 c++ database memory random-access data-structures

我有一个对象数组(比如图像),它太大而无法放入内存(例如40GB).但是我的代码需要能够在运行时随机访问这些对象.

做这个的最好方式是什么?

从我的代码的角度来看,当然,如果某些数据存在于磁盘上或临时存储在内存中,则无关紧要; 它应该具有透明访问权限:

container.getObject(1242)->process();
container.getObject(479431)->process();
Run Code Online (Sandbox Code Playgroud)

但是我应该如何实现这个容器呢?它应该只是将请求发送到数据库吗?如果是这样,哪一个是最佳选择?(如果是数据库,那么它应该是免费的而不是太多的管理麻烦,也许Berkeley DB或sqlite?)

我是否应该自己实现它,在访问沙子时,在内存充满时将内存记忆清除?或者那里有好的库(C++)吗?

对容器的要求是它最小化磁盘访问(我的代码可能更频繁地访问某些元素,因此它们应该保存在内存中)并允许快速访问.

更新:我发现STXXL不能解决我的问题,因为我存储在容器中的对象具有动态大小,即我的代码可以在运行时更新它们(增加或减少某些对象的大小).但STXXL无法处理:

STXXL容器假定它们存储的数据类型是普通旧数据类型(POD). http://algo2.iti.kit.edu/dementiev/stxxl/report/node8.html

你能否评论其他解决方案?那么使用数据库呢?哪一个?

Jam*_*lis 8

考虑使用STXXL:

STXXL的核心是用于外部存储器(核外)计算的C++标准模板库STL的实现,即STXXL实现了可以处理仅适合磁盘的大量数据的容器和算法.虽然与STL的兼容性支持易用性和与现有应用程序的兼容性,但另一个设计优先级是高性能.


Liz*_*bin 1

您可以查看内存映射文件,然后也访问其中之一。