0

사용 방법 : Google App Engine, Python 2.7, Google NDB Datastore, GQL. Google App Engine Datastore 200 인덱스 제한 (index.yaml)

나는 많은 NDB 종류가있는 비즈니스 응용 프로그램을 작성 (ndb.Model) 예 : 등 고객, 공급 업체, 공급 업체, 제조, 주문 .. 내가 여러 법인으로 분류 정보를 사용자에게 제시하고자

/fields :

예 : index.yaml - 고객 클래스는 12-15 개의 색인 파일 항목을 갖습니다.

- kind: Customers 
    - properties: 
    - name: Name 
    - name: NewDate 
    - direction: desc 
- kind: Customers 
    - properties: 
    - name: State 
    - name: Name 
- kind: Customers 
    - properties: 
    - name: Country 
    - name: Name 
- kind: Customer 
    - properties: 
    - name: Code 
    - name: Name 
    - name: Class 
    - name: LastOrderDate 
    - direction: desc 

그냥 예를 들어 있지만 약 15 복합 인덱스를 각각 20 ~ 30 NDB 종류 (ndb.Model을)의이 것을 좋아합니다. 200 한계에 도달하면 해결 방법이 있는지 확인하고 싶습니다.

Google이이 값을 200으로 제한하는 이유를 잘 모르겠습니다. 각 NDB 종류 (ndb.Model) 당 20 개가되어야한다고 생각하십니까?

제안 해 주셔서 감사합니다.

+0

새로운 App Engine SDK - 출시 노트 버전 1.9.0 - 2014 년 2 월 26 일 이야기 : "인덱스 수에 고정 된 제한이 없습니다"는 Search API 또는 응용 프로그램의 모든 사용자 정의 색인에만 해당합니까 ?? ? – Brian

+0

8305 호 : http://code.google.com/p/googleappengine/issues/detail?id=8305에서이 문제를 해결하고 있습니다. 언급 한대로 각 NDB 종류 당 제한이 있어야합니다. – Brian

답변

3

데이터 모델에 대해 다시 생각해 볼 필요가 있습니다. 당신의 주된 문제는 200 개의 인덱스의 한계가 아닙니다. 고려중인 모델을 구현하면 색인이 데이터보다 많은 저장 공간을 차지하게되며 쓰기 비용은 천문학적입니다.

데이터 개체를 저장할 때마다 각 인덱싱 된 속성 당 각 사용자 지정 인덱스 당 더한 항목 당 쓰기 비용이 발생합니다. 데이터 모델을 사용하면 필요한 것보다 모든 엔티티의 각 업데이트 당 15-20 배 더 많은 비용을 지불하게됩니다.

SQL 데이터베이스 경험이있을 수 있지만 데이터 저장소가 매우 다릅니다. 데이터를 다르게 모델링해야합니다.

매우 복잡한 관계가있는 수십 개의 서로 다른 엔티티로 매우 복잡한 앱을 만들었습니다. 나는이 응용 프로그램에서 5 사용자 정의 색인이 있습니다.

편집 : 비 관계형 데이터베이스의 데이터 모델링에 많은 방법이있다

. 예를 들어, "이름 AND 상태"색인의 예를 들어 봅시다. 얼마나 많은 고객이 같은 이름을 가지 겠지만 다른 주에 있습니까? 주어진 이름의 모든 고객을 검색 한 다음이 속성 조합에 대해서만 맞춤 색인을 만드는 대신 필요한 상태에 속한 고객을 선택하는 것이 훨씬 저렴합니다. 읽기는 쓰기보다 훨씬 저렴하고 데이터 크기는 작아야한다는 것을 기억하십시오.

동일하게 모든 예제에 적용됩니다. "코드 AND 이름 및 클래스 및 LastOrderDate"대신 이름 및 주문 날짜별로 모든 고객을 선택할 수 있으며 두 고객이 동일한 이름을 가지고있는 매우 드문 경우에 잘못된 코드/클래스가있는 고객을 드롭하면됩니다.

+0

Andrei, 답장을 보내 주셔서 감사합니다. 나는 대부분의 필드에서 (색인 = False) 가지고 있지만, Multi-corp, 다중 사용자, 보안, 고객 정보에 대한 액세스로 인해 복잡해지고 사용자 정의 색인이 생성됩니다. – Brian

+0

또한 사용자는 선택 사항에 따라 정보를 내보내는 1 - 3 필드의 드롭 다운 필드 값에서 선택할 수있는 내보내기 기능을 제공합니다. – Brian

+1

줄 사이에 마지막 주석은 "기존 관계형 데이터 모델을 데이터 저장소로 이식"시나리오를 나타냅니다. Andrei는 디자인이 구름을 받아 들여 세 번째 정규형을 버려야하기 때문에 나는 업 그레 이드했다. 이로 인해 문제가 발생하는 경우 클라우드 버전의 앱에서 사용자의 기대치를 낮추십시오. 비효율적 인 일에 플랫폼을 강요하는 것은 가치가 없습니다. 반면에 스토리지와 읽기는 저렴하므로 Andrei가 제안한 것처럼 많은 양의 레코드를 무시하고 낭비함으로써 많은 기능을 유지할 수 있습니다. –