2017-01-04 128 views
5

我想計算firebase中的消息大小,以便準確估計我的應用程序的成本。計算firebase消息大小

我注意到運行時實時數據庫計算器顯示的數據大小比預期的大。爲了驗證這一點,我啓動了一個名爲「測試」數據的單一裁判玩具應用:

{"foo": "bar"} 

你打算在其他的答案,我的估計是,這個數據是根據20個字節。

與此代碼檢索數據:

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

這裏是一個jsfiddle showing this toy example

我抓住ref和console.log的數據。我已經訪問了10次這個例子。當我查看玩具應用程序的實時數據庫使用情況標籤時,它顯示了使用30KB帶寬的情況。

正在發送什麼其他數據來解決預期數據使用量(10 * 20字節= 200字節)與實際發送的30KB之間的這種巨大差距?

當初始化添加到數據使用情況的應用程序時是否有一些初始開銷?

編輯:

繼cartant的建議,我登錄從WebSocket的發送幀。以下是我發現(在此之前我看到大約200字節的一些初始化消息):

 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 

所以好像有任何消息了〜200-250字節的開銷。任何人都可以確認嗎?這仍然不能完全解釋我之前提到的差距(10條消息* 250字節= 2.5 KB,相對於30 KB記錄)。

UPDATE:

當前的帶寬使用率高達155 KB。我不確定在這篇文章中35位觀衆如何獲得這個數字。爲了想方設法把這種感覺(我現在還不能確定帶寬實際上是如何計算的),這裏是我的想法:

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. 

所以去155 KB要麼這是多發的100倍以上,或者有一些無法解釋的開銷。另外,我假設(我不知道)初始化的開銷是200字節,發送任何消息的開銷是200字節。

+2

如果您使用的是Chrome,您可以使用開發工具觀察實際的websocket流量。你可能會覺得它很有用。 – cartant

+1

是的,我們有同樣的問題:http://stackoverflow.com/questions/41471842/why-does-the-firebase-bandwidth-keep-increasing-for-no-reason?noredirect=1#comment70152399_41471842 – Coder1000

+1

同樣的問題在這裏以及:http://stackoverflow.com/questions/38959321/firebase-database-bandwidth-usage-growing-rapidly-even-when-when-the-database-is?rq=1 – shell

回答

3

我已經運行了一些更多的測試(讀取22個字節),並認爲計算帶寬時可能存在一個錯誤。如果不是,那麼重新加載的帶寬速率非常大。下面是我的測試:

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 

這是合理的,並相當不錯(雖然這似乎並沒有被考慮進去firbase的定價頁)。

我在等了一個半小時後跑了第二個測試,所以實時數據庫的使用情況可能會更新。

測試2包含了什麼,我認爲可能是一個錯誤:

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 

我不認爲這可能是正確的,這使我相信,有在實時數據庫的數據使用部分的錯誤。我注意到刷新時使用的數據會爬上大約2-4kb(我只有22個字節存儲)。

我很確定這個用例很容易重現。我不會贊成這個,因爲它不是一個真正的答案,它只是給出了更多的問題,但這是我在運行這些測試用例時發現的。

謝謝