2012-10-08 3 views
0

며칠 째로 App Engine을 사용하고 있습니다. 나를 위해 가장 중요한 것은 이제 데이터를 모델링하는 것이므로 그것에 관해 몇 가지 질문이 있습니다. 간단한 MyUser 클래스가 있다고 가정 해 보겠습니다. 모든 친구가 사용자이기 때문에 내가 MyUser 필드가 자신의 친구 목록에서이 친구가있는 다른 참고 MyUser가 있기 때문에 내가 buddyOf 필드가App Engine Datastore - 데이터 모델

@Entity 
public class Buddy { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key id; 
    private Date createAt; 
    private MyUser user; 
    private Key buddyOf; 
} 

이 클래스에서 : 나뿐만 아니라 그렇게 보이는 Buddy 클래스가 있습니다. 질문 : Datastore 한 명의 샘플 친구에게서 얻은 것이라면 MyUser도 마찬가지입니까? 그렇다면 MyUser 클래스에있을 때 다른 Entity을 임베디드하고 Entity을 하나 더 등 ...? 어쩌면 다른 엔티티에만 Key 개의 필드를 유지해야합니까? 주요 질문은 데이터 저장소에 데이터를 저장하는 방법입니다. 컴포지션을 사용해야하고 다른 객체 안에 객체가 있어야합니까? 그렇다면 무엇이 객체에있는 객체의 객체와 함께 무엇입니까? 최상의 접근 방법은 무엇입니까?

답변

1

데이터 저장소 개체 모델 디자인은 일반적으로 관계형 데이터베이스에 사용되는 디자인과 달라야합니다. 속성에 대해 지원되는 유형을 확인해야합니다. https://developers.google.com/appengine/docs/java/datastore/entities#Properties_and_Value_Types 속성 유형으로 객체가 없습니다. 여전히 임베디드 특수 효과를 사용할 수 있지만 최선의 방법은 아닙니다.

사용자를 위해 키 또는 ID를 참조로 저장해야합니다. 인스턴스를 더 작게 만들고 설명하는 문제를 해결할 것입니다. 그러나 참조 무결성에 도달 할 수는 없습니다. NoSQL 디자인의 한계입니다.

1

나는 당신이 n : m 관계를 모델링한다고 생각합니다. 이 요소 유형 버디와 엔티티 (그룹이 참고 MyUser 엔티티의 모든 친구를 나타냄)의 그룹을 가지고, 각각의 참고 MyUser 실체에 대한

  • :이 같은 구조를 만들 수 있습니다.
  • 각 버디 엔티티는 조상으로 MyUser 엔티티를 갖습니다.
  • 각 버디 엔티티 필드를 포함하여 소유자 참고 MyUser 다른 참고 MyUser 개체 사이의 관계를 나타낸다 : 다른 참고 MyUser의 ID 따라서 다음의 동작이 데이터 스토어 쉽게 천연 될

:

  • 추가가/참고 MyUser 엔티티에 친구 삭제 (단지 추가/새 자식 버디 엔티티 삭제)
  • 쿼리 참고 MyUser 엔티티에 대한 모든 친구 (목록의 모든 어린이)

이 구조는 gae-datastore 높은 replaca에 몇 가지 이점이 있습니다. 예를 들어 MyUser 엔티티에 친구 (하위 엔티티)를 추가하면 동일한 엔티티 그룹에 있기 때문에 즉시 질의 할 수 있습니다 (일관된 데이터를 지체없이 볼 수 있습니다).

관련 문제