2010-11-22 5 views
0

가계 유형 데이터를 저장하는 루비 앱을 작성하고 있습니다. 나는. 가계도.가계 유형에 대한 제안 데이터베이스 : MongoDB, Redis 등?

나머지 애플리케이션에서는 계층 적 구조이기 때문에 MongoDB를 스토리지로 사용하고 있지만 계통적 데이터는 해당 계층 구조에있어도 해당 모델에 맞지 않습니다. 만약 내가 더 적절한 데이터베이스 레이어에서 이것을 처리해야하는지에 대한 제안을 누군가가 가지고 있다면 나는 궁금하다.

e.e. A는 B (쌍방향)와 쌍을 이루어 부모 C와 D를가집니다. B는 부모 E와 F를가집니다. A와 B는 자식 G, H, I. G는 H와 쌍을 이루는 식입니다.

하나의 노드에 2 개의 부모 노드가 있으므로 매우 재귀 적이지 않습니다. 그러므로 MongoDB에서는 양쪽 부모가 동일한 트리를 중복하여 포함하기 때문에 내장은 의미가 없습니다. 보다 엄격한 사회 그래프에 가깝습니다 (단 두 가지 유형의 관계 만 있음). 레디 스 세트는 매우 잘 동작 할 것이라고 생각하지만, 다각형 지속성을 가진 스택을 복잡하게 만들기 전에 유사한 구조를 설계 한 다른 사람들로부터 피드백을 받기를 희망했습니다. Redis에서 가지고있는 다른 걱정은 메모리에 이러한 모든 트리를 저장하는 것이 좋은 생각이 아닐 수도 있습니다. 비록 내가 레디 스의 관계를 MongoDB 문서의 오브젝트 데이터와 함께 저장하고 있다면 아마도 괜찮을 것입니다.

답변

2

어쩌면 당신은 그래프 데이터베이스를 도메인에 훨씬 더 가깝게 들리므로 시도해야 할 것입니다. 그리고 거기 밖으로 시도 할 수있는 꽤 몇 가지가 있습니다 http://nosql.mypopescu.com/post/498705278/quick-review-of-existing-graph-databases

+0

나는 neo4j와 놀아 정말 정말 매끄럽게 보인다. 그들의 라이센스의 거대한 팬은 아니지만. 것은 mongodb가 내 애플 리케이션의 나머지 부분에 대한 완벽한 것처럼 문서 databse, 그래서 나는 모든 것을 mongodb 활용하거나 조상 데이터에 대한 다른 솔루션을 혼합거야. 그래프 데이터베이스가 redis set보다 장점이 있습니까? 그래프 DB가 과잉이라고 생각합니다. –

+0

앱이하는 일의 컨텍스트가 없다면 과도한 행동이라고 말할 수 없습니다. 비 관계형 데이터베이스를 사용할 때 데이터를 저장하는 방법과 액세스하는 방법에 대해 먼저 고려해야 할 두 가지 사항이 있습니다. 두 번째 부분이 설명에서 누락되어 답변 할 수 없습니다. 관계를 1 단계 이상으로 탐색해야합니까 (Redis 또는 Twitter의 FlockDB에서 얻을 수있는 것)? 더 일반적으로 관계를 탐색하고 그 측면을 발견 할 필요가 많을수록 그래프 DB가 더 의미가 있습니다. – alexpopescu

+0

글쎄요, 글을 올린 후 꽤 주제를 연구 해 왔습니다. 본질적으로 나는 DAG (Directed Acyclic Graph)를 다루고있다. Neo4j (및 다른 그래프 DB)는 확실히 노드를 통과하는 데 가장 적합하다고 보입니다. 사용자는 주어진 노드에 하나의 노드 (존재하지 않는 경우 아버지, 존재하지 않는 경우 어머니, 여러 자식)를 추가 할 수 있으며 시스템은 특정 깊이까지 그래프의 시각화를 렌더링합니다. 초점이 맞춰진 노드에서 어떤 방향 으로든 반경이 3이라고 말하십시오. 그래서 나는 최대 3 개의 노드를 가로지 릅니다. 확실히 그래프 DB 문제처럼 들리기 시작했습니다. –