Firebase — la base que te avisa.
La idea más rara que trae Firebase es: tu app no pregunta por los datos, los recibe. Cada vez que algo cambia en la base, todas las pantallas que estaban mirando ese pedazo se actualizan solas. Realtime sin esfuerzo, sin servidor propio, sin WebSockets escritos a mano.
01Dos productos, una filosofía
onSnapshot() de fábrica y reglas de seguridad. Más escalable para apps grandes.Las dos son "realtime" y serverless. La elección depende del tamaño esperado y del modelo de datos. Firestore gana en casi todo lo nuevo, pero RTDB sigue siendo perfecto para casos donde el árbol plano modela mejor (chats, contadores compartidos, presencia).
02Los cuatro verbos del RTDB
// Apuntar a una ruta const ref = db.ref('chats/general/messages'); // Reemplazar todo lo que hay en ese path ref.set({ ... }); // Mezclar campos (no borra lo demás) ref.update({ ... }); // Agregar un hijo con clave auto-generada ref.push({ by: 'ana', text: 'hola', at: Date.now() }); // Borrar el nodo ref.remove(); // Y la joya: ref.on('value', snap => render(snap.val()));
on('value') es lo que cambia el juego. Tu UI ya no pregunta — Firebase llama tu función con el dato nuevo cada vez que cambia.
03Caso 1 · RTDB Chat en tiempo real
Dos teléfonos, uno solo árbol. Cuando Ana escribe, el mensaje viaja a Firebase y el listener de Luis dispara — su pantalla se actualiza sin tocarla. Mira el árbol JSON crecer en vivo a la derecha.
push() genera una clave única ordenada por timestamp (los -Mx… que ves). Si dos clientes hacen push al mismo tiempo, sus mensajes no chocan: cada uno termina en su propia clave. set() con la misma ruta los sobrescribiría.
04Firestore — colecciones con superpoderes
db.collection('orders').add({ customer: 'Ana', total: 45000, status: 'recibido' }); // Listener: dispara cada vez que cambia la colección db.collection('orders').onSnapshot(snapshot => { snapshot.docChanges().forEach(change => { if (change.type === 'added') addToUI(change.doc); if (change.type === 'modified') updateUI(change.doc); if (change.type === 'removed') removeFromUI(change.doc); }); });
Si vienes de Mongo, esto te resulta familiar. La diferencia es onSnapshot: aquí no tiras de los datos, te llegan cuando hay cambios. Y un detalle bonito — Firestore te dice qué cambió, no solo el estado nuevo.
05Caso 2 · Firestore Dashboard de pedidos
Un comercio que recibe pedidos. Cada nuevo documento dispara onSnapshot en todos los dispositivos que estén mirando la colección — la cocina, el repartidor, el dueño. Dale a ▶ auto y mira el tráfico real entrando solo, sin recargar nada.
06Reglas de seguridad — el firewall declarativo
Como Firebase se conecta directo desde el navegador, no hay backend que filtre quién puede leer/escribir qué. Esa responsabilidad la asumen las security rules: pequeñas funciones declarativas que el motor evalúa en cada operación.
// Firestore rules — solo el dueño del documento puede modificarlo match /orders/{orderId} { allow read: if request.auth != null; allow write: if request.auth.uid == resource.data.userId; }
El error #1 de los principiantes en Firebase es lanzar a producción con allow read, write: if true. Cualquier persona con la URL podría leer y borrar todo. Las reglas son obligatorias, no decorativas.
07Cuándo Firebase, cuándo NO
Firebase no es "una base de datos más rápida": es una base que cambia tu arquitectura. El servidor pasa a un segundo plano y la sincronización deja de ser un problema. A cambio, pierdes flexibilidad de consulta. Como siempre — la herramienta correcta para el problema correcto.