문제

Google App Engine DataStore에 계층 적 데이터를 저장하고 쉽게 쿼리 할 수있는 방법을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

최상의 옵션은 요구 사항에 따라 다릅니다. 다음은 몇 가지 솔루션입니다 (지정하지 않았기 때문에 Python을 사용하고 있다고 가정합니다).

  1. 전체 트리에서 트랜잭션 업데이트를 수행해야하고 한 트리에 약 1QPS의 지속적인 업데이트가 없으면 내장 된 지원을 위해 내장 저장소를 사용할 수 있습니다. 엔티티를 만들 때 "부모"속성을 전달하여 부모 엔티티 또는 키를 지정할 수 있으며 쿼리시 .ANCESTOR () 메소드 (또는 '조상 IS'가 GQL에서 주어진 엔티티의 모든 후손을 검색 할 수 있습니다. .
  2. 트랜잭션 업데이트가 필요하지 않은 경우 경합 문제 (및 트랜잭션 안전)없이 엔티티 그룹의 기능을 복제 할 수 있습니다. '조상'이라는 모델에 DB.ListProperty (DB.Key)를 추가하고이를 삽입하는 대상의 조상 목록. 그런 다음 MyModel.all (). 필터 ( '조상 =', parent_key)로 주어진 조상에서 내려온 모든 것을 쉽게 검색 할 수 있습니다.
  3. 거래가 필요하지 않고 단체의 직접 자녀를 검색하는 데 관심이있는 경우 (모든 후손이 아님) 위의 설명 된 접근 방식을 사용하지만 ListProperty 대신에 부모 엔터티에 대한 참조 프로페티를 사용하십시오. 이것을 인접성 목록이라고합니다.

사용 가능한 다른 접근법이 있지만이 세 가지는 가장 일반적인 사례를 다루어야합니다.

다른 팁

글쎄, 당신은 당신의 데이터를 가능한 한 선형으로 유지하려고 노력해야합니다. 데이터의 트리 구조를 신속하게 쿼리 해야하는 경우 데이터가 가능한 경우 데이터베이스에 절인 (또는 원하는 경우 JSON에 인코딩 된)에 저장해야합니다. 트리 구조 조각을 신속하게 쿼리하는 데 사용됩니다. 그러나 이러한 지수를 업데이트 할 때 Google App Engine이 어떻게 수행되는지 잘 모르겠습니다.

Google App Engine과 관련하여 주요 관심사는 필요한 쿼리 수를 줄이고 쿼리가 가능한 한 적은 행을 반환하는 것입니다. 운영은 비싸지 만 스토리지는 아니기 때문에 중복성은 나쁜 것으로 간주해서는 안됩니다.

Googling에서 찾은 주제에 대한 몇 가지 생각은 다음과 같습니다 (MySQL이지만 일반적인 아이디어를 얻을 수 있습니다). MySQL에서 계층 적 데이터 관리

아, 그리고 Google App Engine에 대한 토론은 다음과 같습니다. 계층 적 데이터 모델링

한 가지 방법은 모델의 상위 속성을 사용하는 것입니다. 그런 다음 query.ancestor () 및 model.parent () 함수를 사용할 수 있습니다.

이 데이터에 대해 어떤 종류의 작업을 수행하고 싶은지에 달려있어 가장 잘 표현하는 방법에 따라 다릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top