使用 boost 的内存映射文件存储图形数据

Using boost's memory mapped files to store graph data

本文关键字:存储 图形 数据 文件 映射 boost 内存 使用      更新时间:2023-10-16

我有一个无向图,大约有10万个节点和2亿个边。每条边都有少量与之相关的数据(5个整数)。在我的应用程序之前的版本中,图形要小得多,简单地将所有边存储在纯文本文件中并完整地读取该文件并不是问题。对于我的新的,更大的图形,这很快导致内存问题,因为边缘文件本身是几个gb。

我的图应用程序非常简单:我简单地选择一个节点并迭代它的边,直到目标节点满足一些标准。然后我迭代这个目标节点的边,重复这个过程,直到创建了一个由少量边(个位数)组成的网络。

因为我一次只利用了这个图的一小部分,它似乎是一个很好的内存映射文件应用程序。然而,我不确定这将如何实现明智的工作。我如何才能只访问我感兴趣的边块(即连接到指定节点的边)?我希望使用boost的内存映射文件实现,但任何指导都非常感谢。

我认为在c++中从头开始很难做到这一点。即使有Boost的帮助。因为目标平台上的内存是有限的。所以你必须非常小心地设计你的数据结构。然而,我建议你可以尝试使用图形数据库,如neo4j或空间数据库,如PostGIS。它已经在文件系统上实现了图形数据结构