es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    1. Utilizar un mecanismo de limitación de velocidad para controlar la velocidad de las operaciones de escritura que se ejecutan. Este método permitirá escribir en la base de datos a intervalos fijos, evitando el envío inmediato de numerosos procesos de escritura de forma simultánea. Sin embargo, es importante tener en cuenta que utilizar esta función puede llevar a desechar datos, lo cual no es una solución ideal desde una perspectiva de costos.
    2. 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.

Comments are closed.