문제

Google App Engine Datastore는 다음을 기반으로 하기 때문에 빅테이블 그리고 우리는 그것이 관계형 데이터베이스가 아니라는 것을 알고 있습니다. 어떻게 디자인합니까? 데이터베이스 스키마/데이터 모델 이러한 유형의 데이터베이스 시스템을 사용하는 애플리케이션의 경우?

도움이 되었습니까?

해결책

Bigtable 스키마를 설계하는 것은 개방형 프로세스이며 기본적으로 다음 사항에 대해 생각해야 합니다.

  • 사용할 액세스 패턴 및 각각의 사용 빈도
  • 유형 간의 관계
  • 어떤 지수가 필요할지
  • 사용할 쓰기 패턴(부하를 효과적으로 분산시키기 위해)

GAE의 데이터 저장소는 자동으로 데이터를 비정규화합니다.즉, 각 인덱스에는 데이터의 (대부분) 완전한 복사본이 포함되어 있으므로 모든 인덱스에는 쓰기를 수행하는 데 걸리는 시간과 사용되는 저장 공간이 크게 추가됩니다.

그렇지 않은 경우 Datastore 스키마를 설계하는 데 훨씬 더 많은 작업이 필요할 것입니다.각 유형의 기본 키에 대해 신중하게 생각하고 결정이 데이터의 지역성에 미치는 영향을 고려해야 합니다.예를 들어, 블로그 게시물을 렌더링할 때 그에 따른 댓글을 표시해야 할 수 있으므로 각 댓글의 키는 관련 게시물의 키로 시작될 것입니다.

Datastore를 사용하면 이는 그리 큰 문제가 아닙니다.당신이 사용하는 쿼리는 "post_id = n의 댓글에서 선택 *"과 같은 것으로 보입니다. (주석을 표시하려면 제한 절과 "and comment_id> last_comment_id"의 ​​가능한 접미사도 있습니다.) 그러한 쿼리를 추가하면 DataStore는 귀하를위한 인덱스를 빌드하고 읽기는 다음과 같습니다. 마술처럼 빠릅니다.

명심해야 할 점은 각 추가 인덱스가 추가 비용을 발생시킨다는 것입니다.가능한 한 적은 수의 액세스 패턴을 사용할 수 있는 것이 가장 좋습니다. 왜냐하면 GAE가 구성할 인덱스 수와 데이터에 필요한 총 저장 공간이 줄어들기 때문입니다.

이 답변을 읽어보니 조금 모호한 것 같습니다.실습 설계 질문이 범위를 좁히는 데 도움이 될까요?:-)

다른 팁

www.web2py.com을 이용하시면 됩니다.모델과 애플리케이션을 한 번 구축하면 GAE뿐만 아니라 SQLite, MySQL, Posgres, Oracle, MSSQL, FireBird에서도 작동합니다.

GAE는 Django에서 데이터를 관리하는 방법을 기반으로 구축되므로 Django 문서에 유사한 질문을 해결하는 방법에 대한 많은 정보가 있습니다(예: 여기, '첫 번째 모델'까지 아래로 스크롤합니다.)

간단히 말해서 DB 모델을 일반 개체 모델로 설계하고 GAE가 모든 개체 관계형 매핑을 정렬하도록 합니다.

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