2009-11-17 6 views
2

나는 앱 엔진에서 many-to-many 관계를 모델링하는 방법에 대한 질문이 있습니다앱 엔진은 다 대다 데이터 모델링

블로그 항목이 많은 태그가 수, 태그는 많은 블로그 항목에 적용 할 수있는 .

  1. 가 블로그 항목에 속성으로 문자열의 집합을 사용

    나는 몇 가지 시나리오를 참조하십시오.

    • 이이 날 모든 태그 및 가중치 (그들이 적용 얼마나 많은 항목에를) 가져올 수 없습니다 나를 쉽게 태그
    • 를 사용하여 항목을 조회 할 수 있습니다
  2. 사용

    • 이 날 모든 태그 및 가중치
    • 를 가져올 수 있습니다 (엔트리 클래스와 바이스 반대의 태그에 대한 키의 설정)을 입력하고 태그 클래스 사이에 소유되지 않은 관계
    • 유지 관리가 훨씬 더 복잡합니다
    • 설정 속성이 lazyloaded입니까? 아니면 매번 개체의 전체 그래프를 가져올 수 있습니까?
  3. 사용 1. (태그의 수를 가져 오는에 항목, 항목의 수를 가져 오는 각 회전을 가져 오기)하지만, 태그 데이터 및 가중치 별도로

    • 이 동기화 문제를 가지고 유지

[항목의 태그 데이터와 태그 사이에 모든 입력 및 포인터를 감상 할 수있다. 나는 이것이 꽤 일반적인 시나리오라고 생각하지만 나는 아직 좋은 해결책을 보지 못했다.

답변

1

다른 많은 데이터베이스 관리 시스템과 마찬가지로 다 대다 관계는 App Engine Datastore에서 기본적으로 지원되지 않지만 "접합 테이블"을 통해 해결할 수 있습니다. 그러나 App Engine의 쿼리 언어는 조인을 지원하지 않으므로 애플리케이션에서 사용하는 것이 매우 어려울 것입니다. 분산 된 조인은 효율적이지 않기 때문에 사실 Google의 BigTable 아키텍처는이를 방지합니다.

그래서 나는 "단순한 멍청하게"규칙을 따르는 것이 좋습니다. 작동하는 가장 단순한 것을 사용하십시오. "Blogentry"객체의 문자열 목록은 상당히 강력하게 들립니다. 경쟁 조건 (사람들이 동시에 업데이트를 작성하고 서로의 변경 사항을 덮어 쓰는 경향이 있음)이 발생하기 쉽지만 어쨌든 얼마나 많은 사람들이 동일한 블로그 게시물을 편집하고 있습니까?

+0

안녕하세요, 답변 해 주셔서 감사합니다. 당신이 옳습니다. 그리고 지금 제가하는 일입니다 (옵션 1). 아쉽게도 모든 태그와 해당 가중치 목록을 쉽게 얻을 수 없습니다 (태그 클라우드를 갖고 싶기 때문에이 목록이 필요합니다. 새 항목에 태그를 추가 할 때 자동 완성 기능을 원합니다). 메모리에서이 목록을 계산하는 것은 이해하기 쉽지 않을뿐만 아니라 직관적이지 않은 것처럼 보입니다.하지만 아마도이 작업을 수행해야합니다. – Wilken

0

나는 가중치가있는 별도의 태그 목록을 유지하기 위해 옵션 3과 함께 가기로 결정했습니다.

삽입/업데이트 코드가 다소 복잡해 보이지만 제대로 작동하는 것 같습니다.