我有一个对象数组(比如图像),它们太大而无法放入内存(例如 40GB)。但是我的代码需要能够在运行时随机访问这些对象。
做这个的最好方式是什么?
从我的代码的角度来看,当然,某些数据是在磁盘上还是临时存储在内存中并不重要。它应该具有透明的访问权限:
container.getObject(1242)->process();
container.getObject(479431)->process();
但是我应该如何实现这个容器呢?它应该只是将请求发送到数据库吗?如果是这样,哪一个是最好的选择?(如果是数据库,那么它应该是免费的,并且没有太多的管理麻烦,也许是 Berkeley DB 或 sqlite?)
我应该自己实现它,在访问沙子后记住对象并在内存满时清除内存吗?或者那里有很好的库(C++)吗?
对容器的要求是它最大限度地减少磁盘访问(我的代码可能更频繁地访问某些元素,因此它们应该保存在内存中)并允许快速访问。
更新:我发现 STXXL 不适用于我的问题,因为我存储在容器中的对象具有动态大小,即我的代码可能会在运行时更新它们(增加或减少某些对象的大小)。但 STXXL 无法处理:
STXXL 容器假定它们存储的数据类型是普通旧数据类型 (POD)。 http://algo2.iti.kit.edu/dementiev/stxxl/report/node8.html
您能否对其他解决方案发表评论?使用数据库怎么样?和哪一个?