2012-08-17 3 views
-1

저는 약 10 ~ 20,000 개의 사용자가 제출 한 기사 (일반적으로 500-700 단어)를 저장하는 매우 제한된 목적의 웹 응용 프로그램을 작성하고 있습니다. 모든 사용자는 태그 및 키워드에 대한 검색을 수행하고 기사의 일부 (메타 데이터, 텍스트 또는 태그)를 편집하거나 최근의 최신 데이터베이스 전체 사본을 다운로드 할 수 있어야합니다 . (매시간 업데이트되는 한 캐시에서 수행 할 수 있습니다.) 하루 동안 예측할 수없는 몇 가지 스파이크가 발생하는 경향이 있습니다 (많은 사용자가 전체 데이터베이스를 동시에 다운로드하고 100 % 가용성 및 빠른 다운로드가 요구됨) 활동. 이 사용 패턴은 돌로 설정됩니다.데이터베이스가 많은 응용 프로그램에 GAE가 최적화되어 있습니까?

GAE는이 애플리케이션에 현명한 선택입니까? 저비용 (희망 사항 : 무료), 규모의 탄력성, 스택의 대부분에 대한 전문적인 관리로 인해 매력적입니다. 나는 호스트 대신 애플 리케이션 엔진에 대한 아이디어를 좋아한다. 그러나 모든 형태의 데이터 저장소 사용에 대한 과도한 제한과 할당량은 데이터 저장소의 분산 된 아키텍처에 의해 강건성과 최종 일관성 사이의 균형을 결정하는 것과 관련하여 우려됩니다.

GAE에이 응용 프로그램을 적용 할 수있는 방법이 있습니까? 일반 데이터 저장소 API 대신 ndb API를 사용해야합니까? 또는 GAE가 Webfaction과 같은 호스트보다 비용이 많이 드는 데이터 집약적 인 요구 사항입니까?

답변

1

기사에 대한 전체 텍스트 검색 (아직 실험으로 표시되어 있으며 limited to ~1000 queries per day)이 필요하지 않는 한 사용 시나리오는 App Engine에서 잘 맞는 것처럼 들립니다. 10-20k 사용자가 제출 한 기사 (일반적으로 500 ~ 700 단어)

앱 엔진의 최대 개체 크기, 1 MB

저장 않도록 긴 문서의 전체 크기가보다 낮은으로 그것은 문제가되어서는 안됩니다. 또한 데이터를 읽는 비용은 엔티티의 크기가 아니라 읽는 엔티티의 수와 관련이 있습니다.

언제든지 사용자는 태그와 키워드에 대한 검색을 수행 할 수 있어야합니다.

또한 태그 및 키워드 검색이 전체 텍스트 검색이 아닌 한 App Engine의 datastore queries은 이러한 종류의 검색을 효율적으로 처리 할 수 ​​있습니다. 태그와 키워드를 동시에 검색하려면 두 필드 모두에 composite index을 작성해야합니다. 이것은 increase your write cost 일 수 있습니다.

최근의 최신 데이터베이스 전체 사본을 다운로드하십시오.

cron/scheduled task을 사용하여 blobstore에 대한 시간별 덤프를 예약 할 수 있습니다. 덤프가 완료 되려면 60 초 이상 걸리면 cron을 백엔드 인스턴스로 지정할 수 있습니다. 각 덤프마다 데이터베이스의 모든 엔티티를 읽어야한다는 것을 기억하십시오. 이는 시간당 10 ~ 20k 읽기 작업을 의미합니다. 엔티티에 타임 스탬프 필드를 추가하고 덤프 서블릿에서 마지막 덤프보다 새로운 값을 쿼리하여 읽기 작업을 저장하도록 할 수 있습니다.

일 (예 : 많은 사용자가 100 % 가용성과 빠른 다운로드를 요구하면서 동시에 전체 데이터베이스를 다운로드 함)과 저 활동 기간이 예측할 수없는 급등에서 발생하는 경향이 있습니다.

여기는 GAE가 빛나는 곳으로,이 경우 GAE와 함께 매우 효율적인 인스턴스 사용법을 사용할 수 있습니다.

1

귀하의 신청서가 특히 "데이터베이스가 많습니다"라고 생각하지 않습니다. 500-700 단어는 단지 몇 KB의 데이터입니다.

GAE는 적합하다고 생각합니다.

listproperty에 태그가있는 엔티티의 텍스트 속성으로 각 아티클을 저장할 수 있습니다. 텍스트 검색의 경우 검색 서비스 https://developers.google.com/appengine/docs/python/search/ (현재 할당량 제한이 있음)을 사용할 수 있습니다.

모든 데이터를 다운로드하는 것에 대해 100 % 확신 할 수는 없지만 blobstore에 모든 데이터를 저장할 수 있다고 생각하고 (사용자가 pdf로) 사용자가 해당 BLOB를 다운로드 할 수 있다고 생각합니다.

나는 내장 된 비동기 기능과 캐싱을 위해 일반 데이터 저장소보다 NDB를 선택합니다.

할당량 이하로 유지하는 것은 사이트에 액세스하는 사람 수와 다운로드/업로드하는 데이터의 양에 따라 다릅니다.

관련 문제