Google Apps Engine은 Google Datastore를 유일한 NoSQL 데이터베이스로 제공합니다 (BigTable을 기반으로 생각합니다).Java - Google App Engine - Google Datastore에서 그래프 구조 모델링
저는 사회적인 데이터 구조를 가지고 있으며 그래프 데이터베이스에서와 같이 모델링하고 싶습니다. 내 응용 프로그램은 이기종 객체 (사용자, 파일, ...) 및 이들 사이의 관계 (예 : user1 OWNS file2, user2 FOLLOWS user3 등)를 저장해야합니다.
나는이 일반적인 상황을 모델링 할 수있는 좋은 방법을 찾고 있어요, 내가 솔루션의 두 가족으로 생각 :
목록 기반 솔루션 : 모든 객체는 다른 관련 객체와의 목록이 포함되어 있습니다 목록에있는 객체의 존재 자체는 관계입니다 (Google에서 JDO 부분에 말한대로 https://developers.google.com/appengine/docs/java/datastore/jdo/relationships).
그래프 기반 솔루션 : 노드와 관계는 모두 개체입니다. 객체는 관계와는 독립적으로 존재하지만 각 관계에는 두 개 (또는 그 이상) 연결된 객체에 대한 참조가 포함됩니다.
이 두 가지 접근 방법의 강점과 약점은 무엇입니까? 접근 방식에 대해서 1
:이 사람이 생각할 수있는 간단한 방법이며, 그것은 또한 공식 문서에 제시되어 있지만 :
- 각 감독 관계가 오브젝트 기록이 성장합니다 제한 사항이에있다 예를 들어 객체 차원 제한에 의해 주어진 가능한 관계의 수?
- JDO 기능이 있습니까? 아니면 데이터 저장소 구조로 인해 자연스럽게 구현 될 수 있습니까?
- 관계 검색 시간이 목록과 함께 증가합니다.이 솔루션이 많은 관계에 적합합니까?
접근법 2 : 각 관계는 더 높은 수준의 특성을 가질 수 있습니다 (이는 개체이며 속성을 가질 수 있습니다). 그리고 메모리 크기는 Google 문제가 아니라고 생각합니다.
- 각 관계에는 자체 레코드가 필요하므로 관계의 총 수가 증가하면 각 관련 커플의 검색 시간이 늘어납니다. 이것은 많은 양의 관계 (수백만, 수십억)에 적합한가? 나는. Google은 잘 구조화되어있는 레코드를 검색하는 좋은 방법이 있습니까? 아니면 곧 User4라는 User1이라는 친구를 검색하고 싶다면 몇 초 기다려야 할 상황에 처할 것입니까?
- 다른 측면에서는 새로운 관계가 추가 될 때 각 개체의 차원이 증가하지 않습니다.
두 가지 접근법에서 다른 중요한 점을 찾아서 최고의 모델을 선택하도록 도와 주시겠습니까?
그리고해야 할 때까지 JDO를 사용하지 마십시오. Objectify 또는 저수준 API를 대신 사용하십시오. –
답장을 보내 주셔서 대단히 감사합니다! 나에게 이해 시켜라. 만약 내가 10 억 가지의 "A"종류의 물건을 가지고 있다면 A.first와 A.second 두 종류의 파일을 가지고 A.First = Y와 같은 종류의 X 레코드를 찾고 싶다. 질의 시간은 ' t는 db에 저장된 객체의 수에 따라 다릅니다. 그래서 나는 1000 개의 레코드를 가지고 동일한 퍼포먼스를 얻었습니까? 두 번째 접근법을 제안 하시겠습니까? 이 접근 방식에는 폭발적인 인덱스와 같은 몇 가지 중요한 측면이 있습니까? – LJSilver
아니면 다른 방법을 제안 하시겠습니까? – LJSilver