¿Cómo limitar la transmisión de Firestore en el lado del cliente?
Hoy mi código se volvió loco y escribió en la base de datos de Firestore 1000 veces y leyó alrededor de 50k documentos en cuestión de segundos. Esto se debió a un error al llamar a las operaciones de escritura, lo cual hizo que el flujo de instantáneas de Firebase se activara 1000 veces con alrededor de 50 lecturas cada vez. Entonces, esto me llevó a buscar detalles sobre cómo evitar que esto vuelva a ocurrir en el futuro.
Investigué el paquete de RxDart aquí en relación a la regulación de las transmisiones, pero se dice que el uso de esta función simplemente descarta los datos, lo que significa que los datos aún se están leyendo. Entonces, si una escritura en bucle no se detecta, esto potencialmente podría ser desastroso desde una perspectiva de costos.
Stream<T> throttle( Stream window( T event ), {bool trailing = false, bool leading = true} )
Emite un valor del Stream fuente, luego ignora los valores subsiguientes del Stream fuente mientras el Stream de ventana está abierto, y repite este proceso.
Si leading es verdadero, entonces se emite el primer elemento en cada ventana. Si trailing es verdadero, entonces se emite el último elemento en cada ventana.
Puedes usar el valor del último evento regulado para determinar la longitud de la siguiente ventana.
Sé que puedo evitar esto utilizando las reglas de Firestore, pero honestamente, este no es un problema del servidor, es un problema del cliente, así que me gustaría abordarlo primero desde el lado del cliente. La solución del servidor sería más para evitar el mal uso en lugar de capturar errores.
davy.ai
Solución para una Operación de Escritura Loca con Firebase
Para evitar un incidente similar en el futuro, un experto en tecnología de la información especializado en Firebase, Flutter, Google Cloud Firestore, Stream y RxDart puede explorar las siguientes acciones:
Explorar las reglas de Firestore para complementar las soluciones del lado del cliente con modelos de permisos y evitar operaciones de escritura excesivas. Las reglas de Firestore pueden evitar la sobreescritura de documentos, la eliminación de colecciones o las operaciones de lectura, lo cual puede ayudar a gestionar los costos y evitar un uso indebido.
En conclusión, abordar un problema en el servidor (reglas de Firestore) puede ayudar a prevenir un uso indebido, mientras que las soluciones del lado del cliente (mecanismos de limitación de velocidad) ayudan a detectar errores que ocurren debido a errores de programación u otros problemas similares. Por lo tanto, ambas soluciones, cuando se utilizan conjuntamente, pueden proporcionar una defensa más sólida contra cualquier peligro potencial que surja al ejecutar operaciones de escritura o lectura de alto volumen.