mongodb에 그래프 저장
각 노드에 배열이 포함된 무방향 그래프가 있습니다.어레이에서 데이터를 추가/삭제할 수 있습니다.이것을 Mongodb에 저장하고 이 쿼리를 효과적으로 수행할 수 있는 가장 좋은 방법은 무엇입니까: 노드 A가 주어지면, A의 인접 노드에 포함된 모든 데이터를 선택하십시오.
관계형 DB에서는 가장자리를 나타내는 테이블과 각 노드에 데이터를 저장하기 위한 다른 테이블을 만들 수 있습니다.
table 1
NodeA, NodeB
NodeA, NodeC
table 2
NodeA, item1
NodeA, item2
NodeB, item3
그런 다음 인접 노드의 데이터를 쿼리할 때 테이블을 결합합니다.그러나 MongoDB에서는 조인이 불가능하므로, 이 데이터베이스를 설정하고 인접 노드의 데이터를 효율적으로 쿼리하는 가장 좋은 방법은 무엇입니까(공간에 비해 약간의 성능을 선호함).
전문 분산 그래프 데이터베이스
Mongo에 대한 OP 질문과는 좀 거리가 먼 것처럼 들리겠지만, 요즘에는 이런 종류의 작업에 탁월하고 특히 큰 그래프에서 훨씬 더 쉽게 사용할 수 있는 전문화된 그래프 데이터베이스가 있습니다.
https://docs.google.com/spreadsheet/ccc?key=0AlHPKx74VyC5dERyMHlLQ2lMY3dFQS1JRExYQUNhdVE#gid=0 에는 7가지 제품을 비교한 자료가 있습니다. https://docs.google.com/spreadsheet/ccc?key=0AlHPKx74VyC5dERyMHlLQ2lMY3dFQS1JRExYQUNhdVE#gid=0
Titan, OrientDB, Neo4J 등 3대 오픈 소스 제품 중 모두 Tinkerpop Blueprints 인터페이스를 지원합니다.이렇게 생긴 그래프는...
"주노가 2011년부터 알고 지낸 모든 사람들을 매우 존경하는" 질문은 다음과 같습니다.
Iterable<Vertex> results = juno.query().labels("knows").has("since",2011).has("stars",5).vertices()
물론 이것은 빙산의 일각에 불과합니다.꽤 강력한 것들!
만약 당신이 Mongo와 함께 있어야 한다면,
Tinkerpop Blueprints를 다양한 데이터베이스에서 "그래프 구조를 저장하는 JDBC"라고 생각하면 됩니다.Tinkerpop Blueprints API에는 사용자에게 유용한 특정 MongoDB 구현이 있습니다.그런 다음 Tinkerpop Gremlin을 사용하면 모든 고급 트래버설 및 검색 방법을 자유롭게 사용할 수 있습니다.
저는 몽고를 집어들고 이런 종류의 스키마(무방향 그래프, 이웃으로부터의 정보 쿼리)를 조사하고 있습니다. 지금까지 제가 선호하는 방식은 다음과 같습니다.
각 노드에는 이와 같은 인접 키 배열이 포함되어 있습니다.
{
nodeIndex: 4
myData: "data"
neighbors: [8,15,16,23,42]
}
이웃으로부터 데이터를 찾으려면 $in "operator"를 사용합니다.
db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}});
필드 선택을 사용하여 결과를 관련 데이터로 제한할 수 있습니다.
db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}}, {myData:1});
영감을 얻으려면 http://www.mongodb.org/display/DOCS/Trees+in+MongoDB 을 참조하십시오.
MongoDB는 버전 3.4에 네이티브 그래프 기능을 도입할 예정이며, Neo4j와 같은 네이티브 그래프 데이터베이스에 비해 성능이 좋지 않을 수 있지만 아직 판단하기에는 이르다는 점에서 그래프 구조를 저장하고 분석하는 데 사용할 수 있습니다.
자세한 내용은 다음 링크를 참조하십시오.
MongoDB는 유연한 트리 계층 구조를 사용하여 그래프를 시뮬레이션할 수 있습니다.엄격한 그래프 작성 요구사항에 대해 neo4j를 고려하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/5125709/storing-a-graph-in-mongodb
'source' 카테고리의 다른 글
$빈 배열 찾기 (0) | 2023.05.22 |
---|---|
Meteor - collection.find()는 항상 모든 필드를 반환합니다. (0) | 2023.05.22 |
업데이트를 사용하여 여러 필드를 어떻게 업데이트합니까?공식 c# 드라이버를 사용하여 MongoDB에서 설정합니까? (0) | 2023.05.22 |
IHTTPHandler의 용도는 무엇입니까?재사용 가능합니까? (0) | 2023.05.22 |
Bash 셸 스크립트에 입력 인수가 있는지 확인합니다. (0) | 2023.05.22 |