【发布时间】:2013-02-18 15:15:37
【问题描述】:
我在 C++ (std::map) 中使用红黑树实现,但目前,我看到我的 unsigned long long int 索引变得越来越大,以进行更大的实验。我打算使用 700,000,000 个索引,每个索引都存储一个 std::set ,其中包含更多的 int 元素(大约 1-10 个)。我们有 128 GB RAM,但我发现我们开始用完了;事实上,如果可能的话,我什至想在我的实验中减少到 1,000,000,000 个索引。
我对此进行了一些思考,并且正在考虑将几张地图放在一起的森林。基本上,在映射达到某个大小阈值后(或者可能在开始抛出 bad_alloc 时),将其保存到磁盘,将其从内存中清除,然后创建另一个映射并继续执行,直到我得到所有索引。但是,在加载部分,这将非常低效,因为我们一次只能在 RAM 中保存一张地图。更糟糕的是,我们需要检查所有地图的一致性。
那么在这种情况下,我应该寻找哪些数据结构?
【问题讨论】:
-
你能解释一下你看到的实际问题是什么吗?
-
您能详细解释一下这些数据是如何使用的吗?如果存储数据不太灵活,可能会更好,例如排序数组,如果它们适合该问题。
-
问题是我想要在地图中有大量索引的接近原生速度。现在,我们遇到了内存不足的问题。
-
如果您使用的是 Windows,请改用 ESENT(可扩展存储引擎)。
-
或者至少使用 B-tree 代替你的 RB 树,并依赖 OS 提供的交换文件机制。
标签: c++ memory-management data-structures map