5

Sadece yöneticilerin görebileceği bir kullanıcı listem var (= az okur). Bu liste aynı zamanda veri deposundaki kullanıcı sayısını da gösterir. Liste 1000'den daha büyüyebildiğinden, ilk düşüncem normal bir sayımdan kaçınmaktı() ve bunun yerine keskin bir sayaç kullanmıştı.1000'den fazla satırlı, ancak Google App Engine'de az sayıda okunan esnek bir sayaç oluşturabilir miyim?

Ancak sorun yöneticiler aynı zamanda bu tür benzeri sadece görüntüleme kadın/erkek kullanıcılar ve gibi (GUI) çeşitli arama filtreleri erişimi olması. Sayımın bu filtreleri yansıtması önemlidir, böylece kadın kullanıcı sayısını, erkek kullanıcıları ve sayısız diğer kombinasyonları elde edebilirler. Ben arama filtreleri her kombinasyonu için bir sayaç oluşturmak gerekir, çünkü Bu nedenle

, Kırma işleminde olmadan kanatlı bir sayaçları ve yüksek eşzamanlılık sayaçları, iyi bir fikir gibi görünmüyor.

Sadece sayımı bir döngü böyle tarif here olarak() yöntemleri oluşturmak mı yoksa bu çok kötü bir uygulamadır? Aksi halde nasıl yapardım?

Bu sayacın yönetici arabiriminde olduğunu ve çok sınırlı sayıda okuyucunun olacağını unutmayın. Bu gerçekten bir okuma performansını esneklik ve doğruluk için feda etmek istediğim bir durumdur. 1000'den fazla büyümesine rağmen, 10 000'den büyük büyümesi beklenmemektedir.

cevap

2

"Sayım döngüsü" yavaştır, ancak bu günlerde cursors ile biraz daha iyi yapabilirsiniz. Normalde, ihtiyacınız olan tüm "filtrelenmiş" sayaçları denormalize etmenizi öneririm, ancak bu, kullanıcı ekleme ve silme işlemlerini yavaşlatır (ve muhtemelen demografik değişiklikler de), bu nedenle, çok düşük bir hacimdeki okumalar ile ilgili kullanım durumunuz göz önüne alındığında, muhtemelen "sayım döngüsü" yaklaşımı ile kurtulun (artı imleçler ;-)).

+0

Cevabınız için teşekkürler! Evet, çok az okuma yapacağım ve listenin 1000'i geçeceğinden bile emin olmadığım için bu yaklaşımla baştan çıkarıcım. İmleçler hakkında konuştuğunuzda, sayacın bir sonraki pozisyonuna karar vermek için imleci kullanmam gerektiğini mi kastediyorsunuz?()? – Aneon

2

Ben iki yaklaşımı denedim:

1) varlıkların sabit limitli veri deposunu (sorgu anahtar inen sorgusudur) sorgular kendi görev yaz() 50 söylerler. Daha sonra, bıraktığı yerde sorgulamaya başlamak için sonraki görevi sıralar. Her bir görev, bir sonraki parametreyi iki parametreyi geçerek (bir imleç olarak son bırakıldığı yerde ve gördüğü varlıkların toplam sayısını çalıştırarak) sıralar.

2) Bu yaklaşım çok daha kolaydır - ve bu AppEngine'de için google tarafından sağlanan mapreduce kütüphanesini kullanmaktır. Tamamen kullanıcı alanında çalışır, böylece kütüphaneyi indirmeniz ve oluşturmanız ve projenize eklemeniz gerekir. Temel olarak, belirttiğiniz tüm varlıklar arasında yinelemeyi başaracak ve her biri ile ne yapacağınıza dair bir işleyici yazmanıza izin verir (bir sayacı artırma gibi). Burada ayrıntıları bakın: mapreduce.appspot.com - onlar sadece ne istediğinizi yapan bir örnek uygulama var. Sadece bununla ilgili sorun, sonuçların tarayıcınızda görünmesi ve bunu kendiniz yapmadıkça veri mağazasında saklanmamasıdır.

+0

Burada anlatılan ikinci yaklaşım, düzenli olarak tüm önemli istatistiklerin yeniden hesaplanması için bir harita haritasının kullanılması en iyi yaklaşım gibi görünüyor. –

+0

Oh, MapReduce'u daha önce hiç duymamıştım, buna bakmak zorundayım. Bu yaklaşım bana tam bir doğruluk verir mi yoksa periyodik olarak güncellenmesi gerekecek mi (kuyruk kuyruğunu kullanan yüksek eşzamanlılık sayaçları gibi, görev kuyruğunu kullanan)? Manuel olarak saymak istediğim tüm olası filtre kombinasyonlarını ayarlamamı mı gerektiriyor? – Aneon

+0

Peki, harita sırasında sahip olduğunuz varlıkların sayısı azalırsa, bu varlıklar sayılmayacaktır. Harita küçültmek temel olarak belirli bir noktada anlık görüntü alır. İçinde herhangi bir anda sahip olduğunuz varlıkların sayısını gerçek zamanlı saymaz.Her günün sonunda istatistik üretmek için kullanıyorum. – aloo

İlgili konular