簡體   English   中英

使用Boost的內存映射文件存儲圖形數據

[英]Using boost's memory mapped files to store graph data

我有一個無向圖,大約有100,000個節點和2億條邊。 每個邊都有少量與之相關的數據(5個整數)。 在我的應用程序的早期版本中,它的圖形要小得多,將所有邊存儲在純文本文件中並完整讀取此文件並不是問題。 對於我的新的更大的圖表,由於邊緣文件本身為數GB,因此這很快會導致內存問題。

我的圖應用程序非常簡單:我只選擇一個節點並對其邊緣進行迭代,直到目標節點滿足某些條件為止。 然后,我迭代此目標節點的邊緣,重復此過程,直到創建具有少量邊緣(單個數字)的網絡。

由於我一次只使用該圖的一小部分,因此對於內存映射文件來說似乎是一個很好的應用程序。 但是,我不確定這將如何實現。 如何只訪問我感興趣的邊緣塊(即連接到指定節點的邊緣)? 我希望使用boost的內存映射文件實現,但是任何指導都值得贊賞。

我認為在C ++中從頭開始很難做到這一點。 即使在Boost的幫助下。 由於目標平台上的內存有限。 因此,您必須非常仔細地設計數據結構。 但是我建議您可以嘗試利用諸如neo4j之類的圖形數據庫或諸如PostGIS之類的空間數據庫。 已經在文件系統上實現了Graph數據結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM