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

时间:2014-05-06 02:41:03

标签: c++ boost memory-mapped-files

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

我的图形应用程序非常简单:我只需选择一个节点并迭代其边缘,直到目标节点满足某些条件。然后我迭代这个目标节点的边缘,重复该过程,直到创建了一些少量边缘(单个数字)的网络。

由于我一次只使用此图的一小部分,因此它似乎是内存映射文件的一个很好的应用程序。但是,我不确定这在实现方面是如何工作的。我怎么才能只访问我感兴趣的边缘块(即连接到指定节点的边缘)?我希望使用boost的内存映射文件实现,但是非常感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我认为在C ++中从头开始这么做很难。即使在Boost的帮助下。因为内存限制在目标平台上。因此,您必须非常仔细地设计数据结构。但是我建议您可以尝试使用像neo4j这样的图形数据库或像PostGIS这样的空间数据库。已经在文件系统上实现了Graph数据结构。