我有一个对象数组(例如图像),它太大而不适合内存(例如40GB)。但是我的代码需要能够在运行时随机访问这些对象。不适合内存的随机存取容器?
这样做的最好方法是什么?
从我的代码的角度来看,当然,如果某些数据在磁盘上或临时存储在内存中,这应该没有关系;它应该有透明访问:
container.getObject(1242)->process();
container.getObject(479431)->process();
但是我应该如何实现这个容器?它应该只是将请求发送到数据库?如果是这样,哪一个将是最好的选择? (如果一个数据库,那么它应该是免费的,没有太多的管理麻烦,可能是伯克利DB或SQLite?)
我应该自己实现它,记忆存取后的对象清理内存时,它已满?或者有没有好的库(C++)?
对容器的要求是最小化磁盘访问(某些元素可能会被我的代码更频繁地访问,所以它们应该保存在内存中)并允许快速访问。
更新:我原来是STXXL不适合我的问题的工作,因为我存储在容器中的对象有动态的大小,也就是我的代码可以更新他们(增加或减少某些物体的大小),在运行时。但是STXXL无法处理:
STXXL容器假定他们存储数据 类型是普通的旧数据 类型(POD)。 http://algo2.iti.kit.edu/dementiev/stxxl/report/node8.html
请问您可以对其他解决方案发表评论吗?怎么样使用数据库?哪一个?
不知道更多关于你的问题,我会说(从磁盘读取和缓存一些结果;或使用数据库缓存)是很好的解决方案 – 2010-01-25 19:33:10
如果你修改对象,是不是你创建一个新的对象?然后,您要么拥有旧对象,要么删除旧对象,并用新对象替换它。 – codeDr 2011-07-15 18:54:48