2012-12-07 3 views
2

사용자 데이터베이스가있는 사이트를 구축 중입니다. 각 사용자에 대한 그래프를 작성하는 데 arbor.js을 사용하고 있습니다.레일 : 고정 데이터와 동적 데이터를 혼합하여 모델링하는 방법

   vehicle 
      / \ 
      /  \ 
      car  truck 
     /
     /
     sedan 

다음과 같은 JSON으로 표현된다 : 그래프는 다음과 같이 (I 갈하지만 분명히 아직 충분한 명성을하지 않아도 준비 이미지를했다) 보이는 가장자리와 노드가있는 트리 구조이다 :

{ 
    "nodes":{ 
     "vehicle":{ 
     "color":"black", 
     "label":"vehicle" 
     }, 
     "car":{ 
     "color":"orange", 
     "label":"car" 
     }, 
     "truck":{ 
     "color":"red", 
     "label":"truck" 
     }, 
     "sedan":{ 
     "color":"red", 
     "label":"sedan" 
     } 
    }, 
    "edges":{ 
     "vehicle":{ 
     "car":{ 
      "weight":5, 
      "directed":true, 
      "color":"orange" 
     }, 
     "truck":{ 
      "weight":5, 
      "directed":true, 
      "color":"red" 
     } 
     }, 
     "car":{ 
     "sedan":{ 
      "weight":2, 
      "directed":true, 
      "color":"orange" 
     } 
     } 
    } 
} 

각 그래프는 항상 동적 노드와 가장자리와 nodesedges 목적이있을 것이다. 해당 속성 (color, label, weight 등)이 수정됩니다.

각 사용자에 대해이 데이터를 가장 효과적으로 모델링하는 방법을 파악하려고합니다. 나는 MongoDB (Mongoid)와 함께 Rails를 사용하고 있는데, MongoDB가 객체를 데이터베이스의 문서로 저장할 수 있다는 것을 알고 있기 때문입니다. 나는 각 사용자가 내가 정의 할 수있는 그래프 모델을 가질 것이라고 확신하지만, 노드와 에지를 어떻게 다룰 지 확신 할 수 없다.

해결책은 has_many, embeds_many 또는 serialize이 포함될 것이라고 추측합니다. 그러나 고정 및 동적 데이터를 혼합하여 사용하는 방법이 명확하지 않습니다.

또한 위와 같은 방식으로 데이터를 검색하면 디스크에서로드 할 때 쉽게 그래프를 만들 수 있습니다.

도움이 될 것입니다.

+0

같은 당신이 정확히 무엇을 원하는 않는 일부 그래프 데이터베이스를 탐색 할 수 있습니다? 좀 더 정확하게 표현할 수 있습니까? –

+0

난 그냥 내 모델 파일이 어떻게 생겼는지 알아 내려고하고있다. 나는 각 사용자가 하나의 그래프를 임베딩 할 것이라고 생각하고 있는데, 많은 노드와 에지를 포함 할 것이다. 기본적으로 그래프의 노드와 가장자리를 가져오고 설정할 수있는 반면 위에 각 개체를 저장하는 방법을 찾고 있습니다. – Logan

+0

내가 제대로하고 있는지 나에게 말해줘. 그래프 작업을 해당 BSON 레코드에 저장된 그래프 데이터 만 사용하는 모든 사용자에 대해 수행 할 수 있습니다. 원하는 그래프 작업은 2 명의 사용자 그래프와 독립적입니다. –

답변

0

사용자 당 그래프 작업 만 수행하면됩니다. 이 모델을 따를 수 있습니다.

{ 
"nodes": [{"type": "vehicle", "color":"black", "label": "vehicle"}, 
      {"type": "car", "color":"orange", "label": "car"}, 
      {"type":"truck", "color":"red", "label":"truck"}, 
      {"type": "sedan", "color":"red", "label":"sedan"} 
     ], 
"edges": { 
    "vehicle": [ 
        {"type": "car", "weight": 5, "color": "orange"}, 
        {"type": "truck", "weight": 5, "color": "red"} 
       ], 
    "car": [ 
       {"type": "sedan", "weight": 2, "color": "orange"} 
      ], 
    "sedan": [], 
    "truck":: [] 
} 

마치 가장자리에 멀티 맵을 저장하는 것과 같습니다. 또한 그것은 양방향인지의 여부를 스스로 암시합니다. 개별 사용자의 그래프를 독립적으로 처리하려면 꽤 자연스러운 모델입니다.

귀하의 요구 사항을 충족하는지 알려주십시오. 또한 컬렉션에 대해 수행 할 쿼리의 종류를 지정하기 전까지는 모델을 제안 할 수 없습니다. 또한

프로젝트를 시작하는 경우 당신은뿐만 아니라 neo4j

+0

답변 해 주셔서 감사합니다! 이것은 분명히 도움이되지만 실제로 레일 코드를 찾고있었습니다. 즉이 그래프 데이터는 각 사용자별로 어떻게 포함되어 있습니까? User 클래스는 어떻게 생겼을까요? 실제 그래프 모델이있을 것인가 아니면'field : graph'처럼 단순 할까? – Logan

+0

위에서 물어 본 질문에서 'field : graph'와 같이 필요한 것이 모두있는 것처럼 보입니다. 필요에 따라 한 사용자의 그래프에있는 노드가 어떻게 든 다른 사용자의 그래프와 관련 될 수 있습니까? 그렇다면 나는 당신에게 neo4j (그래프 데이터베이스)와 같은 것을 사용할 것을 추천합니다. 그래프가 개별 사용자에게 그리 크지 않고 다른 사용자와 독립적 인 그래프라면 mongo가 좋은 선택입니다. –