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
你能否评论其他解决方案?那么使用数据库呢?哪一个?