使用 boost 的内存映射文件存储图形数据
Using boost's memory mapped files to store graph data
我有一个无向图,大约有10万个节点和2亿个边。每条边都有少量与之相关的数据(5个整数)。在我的应用程序之前的版本中,图形要小得多,简单地将所有边存储在纯文本文件中并完整地读取该文件并不是问题。对于我的新的,更大的图形,这很快导致内存问题,因为边缘文件本身是几个gb。
我的图应用程序非常简单:我简单地选择一个节点并迭代它的边,直到目标节点满足一些标准。然后我迭代这个目标节点的边,重复这个过程,直到创建了一个由少量边(个位数)组成的网络。
因为我一次只利用了这个图的一小部分,它似乎是一个很好的内存映射文件应用程序。然而,我不确定这将如何实现明智的工作。我如何才能只访问我感兴趣的边块(即连接到指定节点的边)?我希望使用boost的内存映射文件实现,但任何指导都非常感谢。
我认为在c++中从头开始很难做到这一点。即使有Boost的帮助。因为目标平台上的内存是有限的。所以你必须非常小心地设计你的数据结构。然而,我建议你可以尝试使用图形数据库,如neo4j或空间数据库,如PostGIS。它已经在文件系统上实现了图形数据结构
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- C++图形类指针混淆
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何从存储在std::映射中的std::集中删除元素
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 存储模板类型以强制转换回派生<T>
- 读取图形可视化的点文件,而无需在提升图中存储节点 ID
- 实现用于在图形中存储边缘的高效容器
- 如何在文件中存储图形
- 我正在尝试通过 Boost 图形库从 Graphviz DOT 文件中读取图形.如何读取存储在数组中的未知数量的属性
- 将图形存储到内存中的最佳方式
- 如何有效地存储非常大的图形空间,同时具有快速索引
- C++:存储较大图形的权重
- 如何存储这种图形
- 巨大的图形存储问题
- 使用 boost 的内存映射文件存储图形数据