2010-03-10 12 views
6

Gdzie Google przechowuje logi, gdy wykonujesz instrukcję Logging? Wyrażenia rejestrowania wydają się dość szybkie, więc nie wydaje się, że są przechowywane w magazynie danych.Jak dokładnie działają logi aplikacji Google App?

Jak niezawodne są dzienniki? Czy jeśli zrobię instrukcję rejestrowania i się powiedzie, czy jest to dość pewne, że pojawi się w dziennikach?

Ile przeszłych historii dzienników jest przechowywanych?

Powodem, dla którego jestem tym zainteresowany, jest to, że tworzę stronę z pytaniami i odpowiedziami i chcę śledzić poglądy każdego unikalnego zalogowanego użytkownika na każde pytanie i wyświetlać liczbę wyświetleń na pytanie strona. Więc jeśli 10 różnych użytkowników odwiedzi stronę z pytaniami 100 razy, wciąż liczy się tylko 10 unikalnych widoków.

Mam komputer zdalny, który wykonuje przetwarzanie w tle dla mojej aplikacji. Planuję, aby ten komputer poza siedzibą pobrał logi co 30 minut i obliczył, jaka powinna być liczba wyświetleń dla każdego pytania na podstawie logów. Robiąc to, nie muszę tworzyć encji magazynu danych dla każdego innego pytania, które każdy użytkownik przegląda.

Co wy myślicie? Czy ktoś widzi z tym jakieś problemy?

EDYCJA: Myślę, że moim głównym zmartwieniem jest niezawodność dzienników.

Odpowiedz

5

To nie jest odpowiedź na twoje pytanie - raczej jest odpowiedzią na problem, który próbujesz rozwiązać.

Jeśli znasz numer Bloom Filters i używasz Memcached's incr (lub sharded datastore counter), możesz utworzyć rozwiązanie, które jest "wystarczająco dobre". Możesz użyć Bloom Filter, aby sprawdzić, czy w zestawie znajduje się wartość (w tym przypadku identyfikator użytkownika), a jeśli nie, zwiększ swój licznik i dodaj wartość do filtra. Jedną z właściwości Bloom Filters jest to, że dodawanie wartości do zestawu, który ma być włączony, jest operacją o stałym czasie. Spacewise, zajmie trochę miejsca na przechowywanie każdego potencjalnego filtra, ale wydaje się, że jest to już rząd wielkości mniej złożony niż pisanie kodu, aby okresowo przeglądać unikalne. Here's a Python implementation.

Nic nie jest za darmo, jednak - powiedziałem "wystarczająco dobre" było ważne. W przypadku filtrów Bloom zawsze istnieje prawdopodobieństwo fałszywego pozytywu. Oznacza to, że w zależności od wielkości haszu na pytanie, istnieje niewielka szansa, że ​​sprawdzisz, czy identyfikator użytkownika został już policzony i otrzymasz "TAK, TO", gdy po raz pierwszy użytkownik wyświetlił to pytanie. . Możesz obliczyć rozmiar potrzebny do rozsądnego fałszywego pozytywu, ale istnieje kompromis w tym zakresie.

+0

Dzięki Ikai, rozważałem użycie memcache i zadałem to pytanie: http://stackoverflow.com/questions/2422131/google-app-engine-memcache-how-likely-am-i-to-lose- dane w tym scenariuszu. Wszystkie otrzymane przeze mnie odpowiedzi mówiły, że nie powinienem polegać na memcache do tymczasowego przechowywania danych, powinienem tylko używać go jako pamięci podręcznej. Tak naprawdę wymyśliłem całkiem niezłe rozwiązanie, aby użyć dzienników żądań, aby znaleźć potrzebne dane :). – Kyle

+0

Próbowałem również używać datastore (http://stackoverflow.com/questions/2427442/google-app-engine-about-how-much-quota-does-a-single-datastore-put-use) i wymyśliłem że było to zbyt drogie, zwłaszcza biorąc pod uwagę, że dane, których potrzebuję, są już zapisane w dziennikach żądań. – Kyle

Powiązane problemy