2013-05-08 2 views
0

는 전세계 여러 도시마다 10 분 동안 실시간 온도 데이터를 수집하는 응용 프로그램을 가정 cron 작업을 통해 데이터 저장소 (memcache)에 지속적 GAE합니다.저장 장치 (메모리) 대안

다음 GAE 데이터 저장소 모델을 사용 ,

class City(db.Model): 
    name = db.StringProperty() 

class DailyTempData(db.Model): 
    date = db.DateProperty() 
    temp_readings = db.ListProperty(float, indexed=False) # appended every 10 minutes 

등으로 cron.yaml, 이미 데이터 저장소 쓰기에 대한 GAE의 일상 무료 할당량을 타격하고

cron: 
- description: read temperature 
    url: /cron/read_temps 
    schedule: every 10 minutes 

하고, 나는이 문제를 해결할 수있는 방법을 찾고있다. 내 데이터 저장소를 줄일 생각하고

에만 효과적으로 1.

하나에 144 번에서 (각 도시에 대한) 매일 쓰기 볼륨을 줄이고 각 하루의 끝에서 온도 데이터를 지속하여 기록 memcache를 임시 스크래치 패드로 사용하는 것이지만 무작위로 데이터를 삭제할 가능성이 있기 때문에 당일 모든 데이터를 잃어 버릴 수 있습니다. (제외 질문 : 경험에서 얼마나 자주 계획되지 않은 퇴거 정말 일이 무엇입니까?)은 다음과 같이

질문은 다음과 같습니다

  1. 같은 메모리/저장 시설 (지속 및 cron 작업을 통해 보장)이 있음 설명 된대로 데이터 저장소 쓰기를 줄일 수 있습니까?
  2. 그렇지 않은 경우 대체 솔루션이 될 수 있습니까?

유일한 다른 요구 사항은 온도 측정은 하루 중 특정 시간 (클라이언트 측에 봉사) 액세스 할 수 있어야한다는 것입니다.

+0

확실하지 않은이 downvote. –

답변

1

모델을 변경하여 각 실행 또는 cron에 대해 거대한 개체가 저장되도록 할 수도 있습니다. 각 도시에 대해서만이 아니라 의미합니다. 예를 들어, 개체가 Measures ...라는 것으로 ... Measures 항목에는 해당 시간에 대한 모든 측정 값 목록이 포함됩니다. 인덱스가없는 속성으로 저장하고 아무런 문제가 없어야합니다. 또한 하루에 144 개의 글을 씁니다. 읽기의 경우

... 좋은 사용 패턴과 같이 측정 항목을 저장하기 위해 memcache를 사용합니다.

+0

고마워, 어제도 시험해 봤어. 나는 이것이 최선의 해결책이라고 생각한다. { '도시': [오늘의 임시 독서 목록], ...} 형식의 딕트를 사용하여 모두 하나의 얼룩으로 절인. Google이 데이터 저장소 사용을 제한함으로써이 솔루션을 강요하는 방법에 흥미를 느낍니다. – silvernightstar

2

데이터 스토어에서 보증 된 유일한 저장 공간입니다.

memcache에 퇴거에 관해서는

- 그것의 앱과 구글 애플리케이션 엔진의 땅에서, 무슨 일이 일어나고 있는지에 따라 달라집니다, 퇴거는 2 분 이내 또는 시간 후에 수 있습니다. 내 appengine 인스턴스에서 나는 보통 가장 오래된 항목을 약 2 시간 이전에 앉아있다. 그러나 그것 모두는 달려있어 당신은 그걸 의지 할 수 없습니다.

작업 대기열 페이로드는 약 10K입니다.

당신은합니다 (10 분 간격으로 측정 된 모든 도시를 포함)의 Blob를 작성하고 다음을 재 처리하고 뽑아 풀다 하루의 끝에서 도시의 세부 사항을 작성할 수 있습니다.

당신은, 클라이언트가 온도 측정에 액세스 할 수 있어야합니다 말을 당신은 하루에 단지 현재 또는 모든 측정 값을 의미 할 때.

+0

나는 오늘의 모든 독서를 의미했다. (특정 도시와 날짜 범위에 대한 질문. 내가 당신의 제안을 정확하게 이해한다면, 귀하의 솔루션은 읽기 용량이 증가하는 불이익을당하는 것으로 보입니다 (한 도시의 온도 판독 값이 144 BLOB에 분산되어 있기 때문에 최악의 경우는 144 배로 1 배가됩니까). 하지만 읽기 문제는 memcache를 사용하여 해결하기가 쉽기 때문에 (쓰기보다) 10 분 간격의 blob을 memcache로 백업하면 문제가 해결됩니다. – silvernightstar

+0

나는 지금 이것을 시험해보고 읽기 성능이 받아 들여지는지 알아 보겠다. – silvernightstar