我已在2周前發佈了一個名爲MyPetrol的Android應用程序,並在三天內在馬來西亞大約有9萬用戶。之後,由於Firebase數據庫帶寬消耗巨大(3天117GB),我放棄了該應用。我是一名自學成才的業餘愛好者,他不是來自IT相關背景,所以我非常擔心這一點。希望有人能幫忙。Firebase數據庫帶寬計算
該應用程序是一個汽油價格的衆包應用程序。用戶可以在特定車站輸入汽油的價格,並且同意所述價格的其他用戶可以「喜歡」它。一旦價格更新,「類似」計數將被重置。
打開應用程序後,它會查詢附近加油站的Google Places API Web服務(最多20個工作站)。因此,它會將聽衆與Firebase數據庫中的電臺數據掛鉤。每個站的數據結構如下所示。
prices{
ChIJpXJ4phI4zDERJqFTBzawpXk={
placeID='ChIJpXJ4phI4zDERJqFTBzawpXk',
company=500,
lat=3.2095573,
lng=101.7185698,
name='Shell Malaysia (Iznora Enterprise)',
firebaseID='xxx',
userName='xxx',
time=1491833181946,
ron95=2.0,
ron97=1.7,
diesel=2.0,
isValid=true
}
}
爲了跟蹤喜歡的,有作爲
likes{
ChIJpXJ4phI4zDERJqFTBzawpXk={
firebaseID1=true,
firebaseID2=true,
firebaseID3=true
}
}
數據的部分我讀Firebase database bandwidth usage when read with Query,我們可以使用(Firebase.getDefaultConfig().setLogLevel(Level.DEBUG))
交通檢查,但我沒有看到有關上傳任何東西並在logcat中下載帶寬。只有像這樣...
04-10 22:39:19.250 3015-3192/? D/RepoOperation: onDataUpdate: /prices/ChIJpXJ4phI4zDERJqFTBzawpXk
04-10 22:39:19.250 3015-3192/? D/RepoOperation: onDataUpdate: /prices/ChIJpXJ4phI4zDERJqFTBzawpXk {time=1491833181946, firebaseID=xxx, valid=true, diesel=2, ron97=1.7000000476837158, ron95=2, placeID=ChIJpXJ4phI4zDERJqFTBzawpXk, name=Shell Malaysia (Iznora Enterprise), userName=xxx, company=500, lat=3.2095573, lng=101.7185698}
04-10 22:39:19.268 3015-3015/? D/EventRaiser: Raising /prices/ChIJpXJ4phI4zDERJqFTBzawpXk: VALUE: {time=1491833181946, firebaseID=xxx, valid=true, diesel=2, ron97=1.7000000476837158, ron95=2, placeID=ChIJpXJ4phI4zDERJqFTBzawpXk, name=Shell Malaysia (Iznora Enterprise), userName=xxx, company=500, lat=3.2095573, lng=101.7185698}
04-10 22:39:19.273 3015-3015/? D/EventRaiser: Raising /likes/ChIJpXJ4phI4zDERJqFTBzawpXk: VALUE: null
最後,我用Android設備監視器檢查每個操作的流量。以下是Firebase的平均結果。谷歌地圖和其他http查詢不包括在內。
+----------------------------+-----------+-----------+-----------------------------------------+
| Action | Rx(bytes) | Tx(bytes) | Notes |
+----------------------------+-----------+-----------+-----------------------------------------+
| onPause | 2942 | 4680 | detach all listeners |
| onResume | 10143 | 5204 | reattach all listeners for 15 stations |
| click "like" by self | 620 | 535 | write action + download /likes/placeID |
| update price by self | 1642 | 1783 | write action + download /places/placeID |
| click "like" by other user | 382 | 112 | download /likes/placeID |
| update price by other user | 423 | 104 | download /places/placeID |
+----------------------------+-----------+-----------+-----------------------------------------+
在我將應用程序關閉之前,我在數據庫中有5.7MB的數據。我可以保證我將每個電臺的聽衆直接連接爲/ prices/placeID,所以我沒有檢索整個「電臺」數據,而只檢索該特定電臺的數據。同樣的「喜歡」。聽衆也分開onPause。
我沒有任何可用的用戶操作日誌,因此我很難追溯發生的事情。但是,每當用戶打開應用程序時,必須查詢Google Place API,因此我知道在3天內,我有245k個查詢。因此對於每個用戶會話。
117GB/245k session = ~480kB/session
這似乎很大。我沒有帶寬等經驗,所以我可能是錯的。即使我假設所有用戶都在下面執行了極不可能的操作,但我仍然無法填充帶寬。
+----------------------------+-----------+-------+--------------+----------------------------------------------------------+
| Action | Rx(bytes) | Times | Total(bytes) | Notes |
+----------------------------+-----------+-------+--------------+----------------------------------------------------------+
| onPause | 2942 | 10 | 29420 | Pause and resume 10 times, this does not update the map. |
| onResume | 10143 | 10 | 101430 | |
| click "like" by self | 620 | 15 | 9300 | Click like on all 15 stations |
| update price by self | 1642 | 15 | 24630 | Update price on all 15 stations |
| click "like" by other user | 382 | 100 | 38200 | 100 other users clicked per session |
| update price by other user | 423 | 100 | 42300 | 100 other users updated the price per session |
| Total | | | 245280 | |
+----------------------------+-----------+-------+--------------+----------------------------------------------------------+
對於一個普通用戶,我希望只有50KB左右最高每會話,因此火力地堡似乎是消耗帶寬的X10量。所以我的問題:
- 我有做每個會話帶寬的計算權嗎?
- 使用Android設備監視器確定的流量是否正確?我錯過了什麼嗎?有沒有更好的方法來檢查?
- Firebase如何計算帶寬?它是否也包含上傳?有沒有隱藏的帶寬?
對不起,很長的文章。感謝有人能幫助。 謝謝。