나는 GAE를 백엔드로 사용하는 Facebook App을 보유하고 있으며 간단한 채점 시스템을 구현하고 있습니다. 실제 모델 수준의 데이터 및 여러 사용자의 가능성이 조금 더 복잡하지만 단순화 된 버전은 다음과 같다 :친구 목록을 기반으로 GAE에서 상한 검색
이class score(db.Model):
value = db.IntegerProperty()
user = db.StringProperty()
이미 세계 최고 열 점수를 표시 할 수 있지만 는 또한의 옵션을 원하는 사용자의 친구의 상위 10 개 점수 표시. SQL 환경에서 SELECT * FROM 점수 user1 IN (... friendslist ...) 또는 user2 IN (... friendslist ...) ORDER BY value LIMIT 10. 무언가를 할 것입니다. 비 관계형 데이터베이스에서 " IN "쿼리는 비용이 많이 들며 GAE에서는 특히 한 번에 30 개 값의 블록으로 제한됩니다. 이 방법으로 쿼리를 구현하는 것은 이상적이지 않습니다.
현재 각 점수는 key_name = facebook id (앱은 가장 높은 점수 만 저장하므로 중복 키에 문제가 없습니다) 점수를 저장 한 다음 score.get_by_key_name (... friendslist)을 사용하십시오. ..). 이 메소드의 문제점은 수없이 많습니다. 모든 친구를 쿼리해야하며, 모든 친구의 점수를 정렬되지 않은 목록으로 반환합니다. 그러면 코드로 파싱해야합니다.
각 점수 엔티티를 memcaching하면로드가 조금 줄어들지 만, 데이터 저장소에 많은 점수가 채워지면 memcache가 잘 확장되지 않으며 이는 여전히 간단한 작업이 될 수있는 비싼 고통스러운 방식입니다. 관계형 데이터베이스. Google App Engine에서 더 나은 방법이 있나요?