2017-01-04 10 views
5

Próbuję obliczyć rozmiar wiadomości w bazie firebase, aby dokładnie oszacować koszt mojej aplikacji.Obliczanie rozmiaru wiadomości Firewalla

Zauważyłem przy uruchomieniu, że kalkulator bazy danych w czasie rzeczywistym pokazywał większe niż oczekiwane rozmiary danych. Aby to sprawdzić, zacząłem aplikacji zabawka, która ma jeden ref nazwie „test” z danymi:

{"foo": "bar"} 

dzieje innych odpowiedzi, mój szacunek jest to, że te dane są poniżej 20 bajtów.

Odzyskiwanie danych z tego kodu:

firebase.database().ref("test").once("value", function(snapshot) { 
    console.log(snapshot.val()); 
}); 

Oto jsfiddle showing this toy example.

Łapię ref i console.log danych. Mam dostęp do tego przykładu poniżej 10 razy. Kiedy patrzę na zakładkę wykorzystania bazy danych w czasie rzeczywistym na zabawce, pokazuje ona coś w rodzaju przepustowości 30KB.

Jakie inne dane są wysyłane na konto dla tej dużej luki w oczekiwanym zużyciu danych (10 * 20 bajtów = 200 bajtów) w porównaniu z faktycznymi 30 KB wysłanymi?

Czy jest jakiś początkowy narzut podczas inicjowania aplikacji, która zwiększa wykorzystanie danych?

EDIT:

Za radą cartant, w Zalogowałem ramki wysyłane z websocket. Oto co znalazłem (Zanim to widzę pewne wiadomości inicjalizacji około 200 bajtów):

 Data              Length  
    {"t":"d","d":{"r":22,"a":"q","b":{"p":"/test","h":""}}}  55 
    {"t":"d","d":{"b":{"p":"test","d":{"foo":"bar"}},"a":"d"}} 58 
    {"t":"d","d":{"r":23,"a":"n","b":{"p":"/test"}}}   48 
    {"t":"d","d":{"r":22,"b":{"s":"ok","d":{}}}}    44 
    {"t":"d","d":{"r":23,"b":{"s":"ok","d":""}}}    44 

Więc wydaje się, że jest tam ~ 200-250 bajt napowietrznych dla każdej wiadomości. Czy ktoś może to potwierdzić? To nadal nie wyjaśnia w pełni wspomnianej wcześniej luki (10 wiadomości * 250 bajtów = 2,5 KB w porównaniu z 30 KB zarejestrowanymi).

UPDATE:

aktualne zużycie pasma wynosi 155 KB. Nie jestem pewien, w jaki sposób ta liczba jest możliwa dzięki 35 widzom w tym poście. Aby spróbować uzyskać poczucie to (ja wciąż nie jestem pewien, jak przepustowość jest faktycznie wyliczone), tutaj są moje myśli:

200 bytes to initialize/connect 
220 bytes per message (200 bytes of overhead + 20 bytes in message) 
100 times sent (this is probably an overestimate, as there are 35 views on this post, but I have viewed it around 10 times myself) 

(200 bytes + 220 bytes) * 100 views = 42000 bytes or 42 KB. 

więc dostać się do 155 KB albo ten został wysłany znacznie więcej niż 100 razy lub jest jakiś niewyjaśniony narzut. Zakładam również (co nie wiem), że narzut do zainicjowania wynosi 200 bajtów, a narzekanie na wysłanie dowolnej wiadomości wynosi 200 bajtów.

+2

Jeśli używasz przeglądarki Chrome, możesz obserwować rzeczywisty ruch internetowy za pomocą narzędzi programistycznych. Może się przydać. – cartant

+1

Tak, mamy ten sam problem: http://stackoverflow.com/questions/41471842/why-does-the-firebase-bandwidth-keep-increasing-for-no-reason?noredirect=1#comment70152399_41471842 – Coder1000

+1

Ten sam problem tutaj również: http://stackoverflow.com/questions/38959321/firebase-database-bandwidth-usage-growing-rapidly-even-when-the-database-is?rq=1 – shell

Odpowiedz

3

Zrobiłem kilka dodatkowych testów (odczyt 22 bajty) i myślę, że istnieje błąd w obliczaniu przepustowości. Jeśli nie, to przepustowość na przeładowanie jest bardzo duża. Oto moje testy:

Test 1 (600 requests of 22 bytes with only one initial connect to the page) 

83 KB total for 600 requests 
83 KB = 83,000 bytes/600 requests = 138.33 bytes per request 
data sent = 22 bytes 
138.33 bytes - 22 bytes = 116.33 bytes overhead per message sent 

co jest rozsądne i bardzo dobre (choć nie wydaje się być uwzględniane na stronie cenowej firbase za).

Uruchomiłem drugi test po odczekaniu półtorej godziny, aby zaktualizować wykorzystanie bazy danych w czasie rzeczywistym.

Test 2 zawiera co myślę, że może być to błąd:

Test 2 (20 page reloads sending one request) 

96 KB total for 20 page reloads + 20 requests 
96 KB/20 = 4.8 KB per reload 

Nie sądzę, może to być prawdziwe, co pozwala mi wierzyć, że nie jest to błąd w części wykorzystania danych z bazy danych w czasie rzeczywistym . Zauważyłem podczas odświeżania, że ​​dane używane wzrosną o około 2-4kb (mam tylko 22 bajty zapisane).

Jestem prawie pewien, że ten przypadek użycia jest łatwo powtarzalny. Nie zamierzam tego głosować, ponieważ to nie jest odpowiedź, to tylko daje więcej pytań, ale to jest to, co znalazłem podczas uruchamiania tych przypadków testowych.

Dzięki

Powiązane problemy