2010-10-08 16 views
5

App Engine Datastore, bir araya getirilmiş sonuç için sorgulanamaz.Google uygulama motoru veri deposunda toplama ("grup olarak") sorgulamak için alternatif strateji

Örnek: aşağıdaki alanlarla "Post" adlı bir varlık var:

Anahtar kimliği, dize takma dize postText, int Her takma adıyla birçok farklı takma ve pek mesajları var

skor Veri mağazamda.

select nickname, sum(score) as sumscore 
from Post 
group by nickname 
order by sumscore 
limit 10 

Bu tür sorgu google app motor veri deposu java api mümkün değildir (JDO: Ben toplam puanlarının ilk on takma lider kurulu istiyorsanız aşağıdaki gibi

, ben genellikle sql olurdu veya jpa).

Benzer bir sonuca ulaşmak için kullanabileceğim alternatif stratejiler nelerdir?

Ağır ve kaba bir şekilde, her Post varlığını yükleyebilir ve toplama kodumu tam olarak uygulama kodumda hesaplayabilirim. Bu büyük veri setlerinde açık değildir.

Başka ne stratejiler kullanabilir

?

+1

Google, yalnızca eklentilerini güncellediyse DataNucleus, sizin için "kaba ve kaba kuvvet" yaklaşımını şeffaf bir şekilde yapardı. sadece onların eklentisine çizgilerin bir avuç olacağını yapmak kod, bir yıl önce katkıda ... – DataNucleus

+1

@DataNucleus yerleşik olması desteğiyle daha hızlı ya da daha verimli yapmak olmaz. –

+1

@Nick, elbette olmaz, ama tüm kullanıcı-deneyimi daha hoş bir manzara olurdu ve insanların yazması gereken kod miktarı daha az olurdu - işte olduğumuz iş – DataNucleus

cevap

10

Bir Nickname modelini oluşturun ve her yeni bir Yazı eklediğinizde, ilgili Takma Adı'nı alın ve orada saklanan skor toplamını artırın. Temel olarak, sorgulama zamanı değil, ekleme/güncelleştirme zamanında hesaplama yapın.

+0

Merhaba Amber.Katkınız için teşekkürler. Bunu zaten bir dereceye kadar yapıyorum. (Modelim tanımladığımdan daha karmaşıktır). Bu konuda gezinmek için ekler ve güncellemelerle ilgili çok fazla veri zaten topluyorum. Ancak, mümkün olan her bir toplu istatistiğin bu şekilde kaydedilmesi mümkün değildir (her birini şimdi ve sonra hesaplamak istediğim birçok farklı istatistiğe sahibim). Ama bu hala geçerli bir cevaptır. – Patrick

+1

Amber'ın yaklaşımı doğru ve ölçeklendirilecek. I onlarca hesaplamak için 'fan-hayata manzarası' çok benzer bir yaklaşım (http://code.google.com/events/io/2010/sessions/high-throughput-data-pipelines-appengine.html) kullanımı agrega. Oldukça iyi çalışıyor. –

+1

Çekişmeyi en aza indirmek için (http://code.google.com/appengine/articles/sharding_counters.html) bu tekniği kullanıyorum; bu sayaçlar ve istatistiklerin güncellemelerini atomik olarak ertelemenin yanı sıra. Bu cevabı en iyisi olarak işaretliyorum. – Patrick