Cálculo del ancho de banda de la base de datos de Firebase

Publiqué una aplicación para Android hace 2 semanas llamada MyPetrol y en tres días alcancé aproximadamente a 90k usuarios en Malasia. Después de eso, eliminé la aplicación debido al gran consumo de ancho de banda de la base de datos de Firebase (117 GB durante los 3 días). Soy un aficionado autodidacta que no proviene de antecedentes relacionados con TI, por lo que estoy realmente preocupado por esto. Espero que alguien pueda ayudar.

La aplicación es una aplicación de abastecimiento público para el precio de la gasolina. El usuario puede ingresar el precio de la gasolina en una estación en particular y otros usuarios que estén de acuerdo con el precio establecido pueden "darle" me gusta. Una vez que se actualiza un precio, se restablece el recuento de "me gusta".

Al abrir la aplicación, consulta los servicios web de la API de Google Places para una estación de servicio cercana (máximo 20 estaciones). Con eso, engancha a los oyentes a los datos de las estaciones en Firebase Database. La estructura de datos para cada estación se ve así.

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
    }
}

Para realizar un seguimiento de los Me gusta, hay una sección de datos como

likes{
    ChIJpXJ4phI4zDERJqFTBzawpXk={
        firebaseID1=true,
        firebaseID2=true,
        firebaseID3=true
    }
}

Yo leoUso del ancho de banda de la base de datos de Firebase cuando se lee con Query que podemos usar(Firebase.getDefaultConfig().setLogLevel(Level.DEBUG)) para la verificación del tráfico, pero no vi nada sobre el ancho de banda de carga y descarga en logcat. Solo algo como esto ...

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

Al final, utilicé Android Device Monitor para verificar el tráfico de cada acción. A continuación se muestran los resultados promedio de Firebase solamente. Google Map y otras consultas http no están incluidas.

+----------------------------+-----------+-----------+-----------------------------------------+
|           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                |
+----------------------------+-----------+-----------+-----------------------------------------+

Justo antes de quitar la aplicación, tenía 5,7 MB de datos en la base de datos. Puedo garantizar que conecté al oyente directamente para cada estación como / precio / placeID, por lo que no recuperé toda la información de "Estación", sino solo los datos de esa estación específica. Del mismo modo para el "me gusta". Los oyentes también están separados en pausa.

No tengo ningún registro de acciones de usuario disponible, por lo tanto, me resulta difícil rastrear lo que sucedió. Sin embargo, cada vez que los usuarios abren la aplicación, se debe consultar la API de Google Place, por lo que sé que durante los 3 días tuve 245 mil consultas. Por lo tanto, para cada sesión de usuario.

117GB / 245k session = ~480kB/session

Eso parece enorme. Tengo cero experiencia con el ancho de banda, etc., por lo que podría estar equivocado. Incluso si asumo que todos los usuarios hicieron la acción extremadamente improbable a continuación, todavía no puedo llenar el ancho de banda.

+----------------------------+-----------+-------+--------------+----------------------------------------------------------+
|           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 |                                                          |
+----------------------------+-----------+-------+--------------+----------------------------------------------------------+

Para un usuario normal, esperaría tener alrededor de 50kB máximo por sesión solamente, por lo que Firebase parece estar consumiendo una cantidad de ancho de banda x10. Entonces mis preguntas:

¿Hice el cálculo correctamente para el ancho de banda por sesión?¿El tráfico determinado usando Android Device Monitor es correcto? ¿Me estoy perdiendo de algo? ¿Hay una mejor manera de verificar?¿Cómo calcula Firebase el ancho de banda? ¿Incluye cargas también? ¿Hay algún ancho de banda oculto?

Perdón por la larga publicación. Aprecio si alguien puede ayudar. Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta