2010-08-13 4 views
1

내 독서는 아직로 제한하지만, 지금까지 여기에 내가 GAE 데이터 저장소 사용하기위한 식별 한 핵심 사항입니다된다매핑 데이터 :

  • 그것은 관계형 데이터베이스 아니다는 .
  • 데이터 중복은 기본적으로 저장 공간 전체에서 발생합니다.
  • 데이터 저장소 수준에서 테이블을 '조인'할 수 없습니다.
  • 쓰기 횟수가 적은 읽기에 대해 최적화됩니다.

이는 블로그 시스템에 대한 다음과 같은 데이터 모델에 나를 인도 : ID, 날짜, 작성자, 내용, 평가, 태그 :

블로그 '열'의 상대적으로 알려진 세트가 있습니다. Datastore는 원하는대로 추가 열을 허용하지만, 블로그 시스템 전체에 대해 더 많은 생각을 할뿐만 아니라 더 많은 백엔드 특수 코딩이 필요하기 때문에 실시간으로 열을 추가 할 가능성은 희박합니다.

블로그에는 설정 한 수의 댓글과 태그가 없습니다. 전통적인 관계형 DB 구조에서, 이들은 결합을 통해 맵핑됩니다. 이러한 GAE에서는 불가능하기 때문에, 나는 다음과 같은 구현에 대한 생각 -> ID, 작성자, 날짜, 제목, 내용, 평가, 태그

  • 댓글 -

    • 기사> article_id를, 저자, 날짜, 내용, 평가
    • 태그 -> 태그, 제 ID를

    예 :

    Article- 1 - 관리자 - 01/01/2011 - 질문? - 답변 ... - 5 - 질문, 답변, 추측, 반박 2 - 관리자 - 01/05/2011 - 누가 압니까? - 내가 아니야! - 10 - 질문

    의견 - 1 - 존 스미스 - 2011년 1월 2일 - 0 1 - - 신원 미상 - .. 바보, 바보, 바보 2011년 1월 3일 - 스마트, 스마트, 스마트 .. - 5

    Tags- 질문 - 1, 2 개 답변 - 1 추측 - 1 숙고 -

    한 지금이 내 추론이다. 블로그를 탐색 할 때 날짜, 작성자, 태그/주제, 등급, 댓글 등으로 날짜, 작성자 및 등급은 고정적이므로 문제의 기사와 함께 하나의 테이블에 쉽게 상주 할 수 있습니다.

    태그는 'table'태그와 'table'태그 사이에 중복되지만 여기서는 일관성이 응용 프로그램 수준에서 처리되며 태그는 응용 프로그램 수준에서 기사를 보낼 때 결합을 제거하기 위해 남아 있습니다. 태그 테이블은 태그로 검색하는 데 사용됩니다. 그런 다음 응용 프로그램 수준에서 아티클 목록을 구문 분석 한 다음 응용 프로그램 호출을 통해 이러한 아티클을 검색합니다.

    의견과 동일한 문제가 발생할 것입니다. 검색된 기사 ID를 전달하는 추가 메서드 호출을 통해 응용 프로그램 수준에서 조인이 수행됩니다.

    이제 응용 프로그램 수준에서 조인을 처리해야하는 이유는 무엇입니까?나는 각 기사에 모든 것을 삽입하고 코멘트를 추가하는 것에 대해 생각해 보았지만 블로그가 수천 개의 기사에 포함되면 정렬 및 검색의 시간 복잡성에 관해 생각해 보았고 수익의 크기에는 제한이 없었습니다. 얼마나 큰 기사/설명이 될지 알기. 나는 테스트하지 않았지만 시간 복잡성을 생각하면서 태그로 기사를 검색 할 때 기사 검색 수가 기사의 수에 따라 선형 적으로 증가한다고 결론을 내리기 시작했습니다. 이 문제를 해결하고이 접근법을 극복하기위한 방법입니까? 또한 일반적으로이 데이터 모델은 GAE에서 영구 데이터 저장소를 유효하게 구현하는 방법과 비슷합니까?

    감사합니다, 그것은 주위에 내 머리를 정리하려고 ...

  • 답변

    2

    귀하의 접근 방식은 꽤 합리적인 소리. 태그별로 기사를 검색하는 것은 기사의 태그 속성 인 ListProperty를 사용하여 필터링하면 쉽게 완료됩니다. 즉, 데이터 저장소의 숫자가 아닌 반환 된 결과의 수에 비례하여 시간이 걸립니다. 별도로 사용되는 모든 태그를 나열 할 수 있도록 별도의 '태그'엔티티 집합을 유지해야합니다.

    series of posts에서 App Engine에 블로깅 시스템을 작성하고 싶을 것입니다.