我需要維護一個大的有向圖G,可能有數百萬個節點和邊。可能它可能不適合內存。有效的方式來操縱大(不適合內存)圖
一些頻繁操作我需要在該曲線圖中執行包括:
每個節點/邊緣將具有與其相關聯的用戶定義的屬性,諸如訪問計數,體重等
對於每個節點(頂點),我需要根據屬性值執行有效的查詢。例如,找到X值大於v1但小於v2的節點。這可能需要在某些領域建立索引。
我需要找到一個給定節點的所有入邊和出邊,並更新邊的權重。我需要從給定節點進行本地(基於DFS的)遍歷,並返回滿足特定用戶定義謂詞的所有路徑(此謂詞可以使用路徑中節點/邊的屬性值)。
我將需要有效地添加/刪除節點/邊緣。雖然這並不像操作1,2,3那樣頻繁。
圖中有一些熱點可能比其他部分更頻繁地訪問,我想將這些熱點緩存在內存中。
以最少的實施工作實現這一目標的有效方法是什麼?
我在看一些基於磁盤的圖形數據庫,例如Neo4j/InfiniteGraph/DEX。儘管它們支持上述所有操作,但它似乎是一種矯枉過正,因爲我不需要它們提供的很多功能,例如一致性/併發控制或基於羣集的複製。另外,它們中的很多都基於Java,我更喜歡C/C++接口。
基本上我只需要一個磁盤圖形庫,它可以有效地處理持久性,查詢節點和本地遍歷。你可以使用現有的(開源)項目嗎?如果不是,那麼實施這樣的事情的最好方法是什麼?
什麼是錯的使用與你不需要某些選項的工具嗎?很有可能你所需要的操作在Neo4j之類的操作上也會更加高效。 – mb21