2009-05-25 8 views
1

이것은 Google App Engine에 적용 할 수 있지만 반드시 제한 할 필요는 없습니다.App Engine에 적용 가능한 배분 (및 백분위 수) 계산 분주금을 계산 하시겠습니까?

Google App Engine에서 데이터베이스는 관계형이 아니므로 집계 함수 (합계, 평균 등)를 구현할 수 없습니다. 각 행은 서로 독립적입니다. 합계와 평균을 계산하기 위해 앱은 데이터베이스에 대한 개별적인 개별 쓰기마다 다시 계산하여 계산을 상환해야합니다. 따라서 항상 최신 상태로 유지해야합니다.

백분위 수 및 도수 분포 (밀도)를 계산하는 방법은 무엇입니까? 나는 값의 필드의 밀도에 대한 그래프를 만들고 싶습니다.이 값의 집합은 아마도 수백만에 달합니다. 전체 데이터 세트 (각 쿼리에 대한 제한이 반환되는 1000 개의 행이 반환 됨)를 반복 할 수 있으며,이를 기반으로 계산하지만 차라리 몇 가지 현명한 방법을 사용하는 것이 좋습니다.

일정 기간 동안 계산할 수있는 밀도/빈도/백분위 수 분포를 계산하거나 근사화하는 알고리즘이 있습니까?

그런데 데이터의 최대 값과 최소값이 모든 곳에서있을 수 있다는 점에서 불확실합니다. 따라서 배포본은 데이터의 약 95 %를 차지해야하며이를 기반으로 한 밀도 만 수행해야합니다.

답변

0

그것은 전체 데이터 세트를 통해 루프 실현 될 수있다, 그 기반으로 계산해 (각 쿼리에 대한 제한은 1000 개 행이 반환됩니다), 그러나 나는 오히려 일부 스마트 접근을 할 것입니다.

이것은 내가하는 가장 확실한 접근 방법입니다. 왜 이것을 피하려고합니까?

+2

GAE는 작업을 수행하는 데 걸리는 시간과 데이터 저장소 CPU 시간을 제한합니다. 모든 것이 http 요청으로 처리되므로 요청 당 많은 양의 데이터를 처리 할 수 ​​있습니다. 큰 작업을 여러 작업으로 나누고 결과를 결합하는 것이 간단한 방법이 있다면 너무 어려울 수 있습니다. –

2

한 줄에 하나의 숫자를 얻기 위해 전체 행 (한 번에 1000 개까지 제한)을 반복해서 가져 오는 것은 별 의미가 없습니다. 따라서 숫자 목록을 보유하고있는 별도의 엔터티에 단일 번호를 기록하여 데이터를 비정규 화합니다 (한 쿼리 당 1MB로 제한되므로 4 바이트 숫자는 목록 당 250,000 개 이하의 숫자로 제한됩니다).

숫자를 추가 할 때 최신 "추가 된 데이터 값 목록"엔티티를 가져오고, 전체를 새로 작성한 경우 새 숫자를 추가하여 저장하십시오. 아마도 통계에있는 작은 오류가 살인자가 아니라면 거래가 필요하지 않을 것입니다.

항목의 데이터를 변경할 수있는 경우 "삭제 된"데이터 값을 기록하는 동일한 종류의 별도 엔티티가있을 수 있습니다. 한 항목의 값을 23에서 45로 변경하려면 23을 최신 "삭제 된 값"목록에 추가하고 45를 최신 "추가 된 값"1에 추가하십시오. 이는 항목 삭제도 포함합니다.

+0

하지만 그게 무엇입니까? 각 숫자에 대한 행 대신에 이제 25 만 개의 행이 있습니다. 어떻게 사용할 수 있습니까? 당신이 1000 개의 숫자에 대해 체리를 선택하면 계산을 수행하기에 충분히 작은 통계적으로 적절한 샘플을 얻을 수 있기 때문에 체리가 작동하는 것으로 생각됩니다. –

+1

250k 숫자 당 하나의 엔티티가 있습니다. 1000 행 내에서 2 억 5 천만 개의 숫자를 가질 수 있습니다. "수십만 개가 아닌"이 값 집합은 아마도 수백만에 달합니다 "라고 말하면서 단일 쿼리에서 관련 데이터를 다시 가져와 원하는 처리를 수행 할 수 있어야합니다 (슬라이스를 초과하는 경우). CPU 시간의, 슬라이스 작업 자체를 합리적인 증가, 물론). –

+0

아, 그 말이 맞습니다.나는이 가능성을 가지고 놀아야 할 것이다. 감사. –