Sumar los datos del firebase eficientemente
Tengo una aplicación donde tengo hasta unos pocos miles de entradas en una mesa de firebase. Ahora alguien se está conectando a esta tabla y necesito contar y sumar estos artículos para arriba.
-itemlist | --1 |-x:2 --2 |-x:4
y así. Un usuario puede conectarse en cualquier momento (lo que significa que nunca vio esta tabla antes) y otro usuario puede cambiar algún valor en un momento dado o agregar valores.
- Firebase Offline Capabilities y addListenerForSingleValueEvent
- ¿Cómo envía una Notificación Firebase a todos los dispositivos a través de CURL?
- Firebase Cloud Messaging reemplazó las claves del servidor con Tokens para enviar notificaciones / mensajes
- ¿Cómo agregar más elementos a FirebaseRecyclerAdapter?
- Leer datos de Firebase tarda mucho incluso con un pequeño conjunto de datos
Ahora si intento y agrego un ValueEventListener
a la "lista del artículo" trabaja si no hay nuevos datos pero tan pronto como conecto con una nueva base de datos con 1000 entradas o así que el oyente llama para cada una de estas 1000 entradas.
Intenté con onChildlistener pero esto llama el en ChildItem agregado para cada artículo adicional en la primera vez. Esto tarda más de 2 minutos a veces.
¿Hay una manera de obtener toda la base de datos una vez, calcularlo y luego sólo escuchar los cambios?
- Obtenga la ID empujada para un valor específico en firebase android
- Cómo representar datos anidados en la clase Firebase
- Los eventos de Android Firebase Analytics no se muestran en la consola
- Android Firebase DynamiteModule: Error al cargar el descriptor del módulo
- Empezó a usar el nuevo sitio web de Firebase y estoy recibiendo este error al probar el programa de ejemplo de autenticación de Android
- Firebase LatLng falta un constructor sin argumentos
- FirebaseRemoteConfig.fetch () no activa OnCompleteListener cada vez
- Manejando keepSynced () mientras está en segundo plano en Android y con FCM
La base de datos Firebase no tiene operadores de agregación del servidor, ya que inherentemente estarían en desacuerdo con la escalabilidad y la naturaleza en tiempo real de la base de datos.
Eso le deja con dos opciones para calcular agregados:
-
llevar a cabo el lado del cliente como ya has sugerido
-
mantener un agregado de ejecución que actualiza con cada cambio
Realizar la agregación de cliente es una buena opción si el cliente ya tiene que mostrar los datos de todos modos. Por ejemplo: si está mostrando la lista de usuarios en una sala de chat específica, puede contar fácilmente el número de usuarios del lado del cliente de los mismos datos.
Pero si no necesita los datos del lado del cliente, entonces sólo descargarlo para agregar es un desperdicio y dañará la escalabilidad de su aplicación. En tales casos, una opción es mantener un nodo adicional que mantiene el agregado y actualizarlo con cada operación de escritura relevante. Por ejemplo: si desea mostrar cuántos usuarios se han registrado con su aplicación, puede mantener un global /user_count
que actualiza cada vez que un usuario registra / /user_count
registro. Para esta actualización, normalmente utilizaría una transacción .
- Usar "adjustPan" o "adjustResize" específico de un fragmento
- ¿Cómo acceder / carpeta de datos de otra aplicación a través de su aplicación?