수백만 개의 노드와 가장자리가있는 대형 그래프 G를 유지해야합니다. 잠재적으로 메모리에 맞지 않을 수 있습니다.큰 (메모리에 맞지 않는) 그래프를 효율적으로 조작하는 방법
I이 그래프에서 수행해야하는 일부 빈번한 작업 포함
각 노드/에지 등의 접근 횟수, 체중 등의 연관된 사용자 정의 속성을 가질 것
각 노드 (정점)에 대해 속성 값을 기반으로 효율적인 쿼리를 수행해야합니다. 예를 들어, X 값이 v1보다 크지 만 v2보다 작은 노드를 찾으십시오. 아마도 특정 필드에 대한 색인을 작성해야합니다.
주어진 노드의 들어오는 가장자리와 나가는 가장자리를 모두 찾고 가장자리의 가중치를 업데이트해야합니다.
특정 노드에서 로컬 (DFS 기반) 순회를 수행하고 특정 사용자 정의 조건자를 만족하는 모든 경로를 반환해야합니다 (이 조건자는 경로에서 노드/에지의 속성 값을 사용할 수 있음).
노드/에지를 효율적으로 추가/삭제해야합니다. 이것은 작업 1, 2, 3과 같이 자주 수행되지는 않습니다.
는 잠재적으로 다른 부분보다 훨씬 더 자주 액세스됩니다 그래프의 일부 핫스팟이 있고, 나는 메모리에이 핫스팟을 캐시하고 싶습니다.
최소 구현 노력으로이를 달성하는 효율적인 방법은 무엇입니까?
저는 Neo4j/InfiniteGraph/DEX와 같은 디스크 기반 그래프 데이터베이스를보고 있습니다. 위의 모든 작업을 지원하지만 일관성/동시 제어 또는 클러스터 기반 복제와 같은 많은 기능을 필요로하지 않으므로 과도한 것 같습니다. 또한 이들 중 상당수는 Java를 기반으로하며 C/C++ 인터페이스로 무언가를 선호합니다.
기본적으로 노드와 로컬 순회에 대한 지속성, 쿼리를 효율적으로 처리하는 디스크 그래프 라이브러리가 필요합니다. 내가 사용할 수있는 기존 (오픈 소스) 프로젝트에 대한 권장 사항이 있습니까? 그렇지 않다면 그런 것을 구현하는 가장 좋은 방법은 무엇입니까?
? 기회는 네가 필요로하는 작업이 Neo4j와 같은 것에서 더 잘 수행된다는 것입니다. – mb21