Vue Firebase esencial
Cloud Firestore
- La información se guarda en documentos.
name: "Guizmo",
age: 3,
color: "black"
name: "Rouco",
age: 8,
color: "black and white",
chip: true
Vue Firebase esencial
Cloud Firestore
- La información se guarda en documentos.
- Y los documentos en colecciones (y sub-colecciones).
name: "Guizmo",
age: 3,
color: "black"
name: "Rouco",
age: 8,
color: "black and white",
chip: true
cats
Vue Firebase esencial
Cloud Firestore vs Realtime Database
- Mismo cometido.
- Tres diferencias clave.
1
Modelo de datos. Cloud Firestore usa documentos y colecciones. Realtime Database usa una gran árbol JSON.
Vue Firebase esencial
Cloud Firestore vs Realtime Database
- Mismo cometido.
- Tres diferencias clave.
2
Consultas. En Cloud Firestore puedes combinar consultas y retornar únicamente el documento encontrado. Realtime Database devuelve todo el árbol de información (subtree) al que pertenece el resultado.
Vue Firebase esencial
Cloud Firestore vs Realtime Database
- Mismo cometido.
- Tres diferencias clave.
3
Pricing. En Cloud Firestore pagas principalmente por las operaciones de lectura, escritura y borrado. En Realtime Database por el ancho de banda y almacenamiento físico.
Vue Firebase esencial
SQL vs NoSQL
- En el mundo SQL existe un schema definido que garantiza una normalización de datos.
- Esta estructura no se puede variar sobre la marcha, es decir, todos los registros de una tabla tienen la misma estructura o esquema.
id | username | last_login |
---|---|---|
321 | "juanwmedia" | 1599040732 |
322 | "guizmo" | 1599040759 |
333 | "nino" | 1599040788 |
Users table
Vue Firebase esencial
SQL vs NoSQL
- En SQL, para establecer relaciones usamos claves foráneas para trazar la relación.
id | username | last_login |
---|---|---|
321 | "juanwmedia" | 1599040732 |
322 | "guizmo" | 1599040759 |
333 | "nino" | 1599040788 |
Users table
id | title | user_id |
---|---|---|
111 | "Super post" | 321 |
112 | "ABC of black cats" | 321 |
113 | "Cats are awesome 😺" | 333 |
Posts table
Vue Firebase esencial
SQL vs NoSQL
- Luego, a través de SQL expresamos una consulta donde se unen esas claves diferentes tablas, devolviendo el resultado.
SELECT * FROM posts, users
WHERE post.id = 112
AND users.id = posts.user_id
Vue Firebase esencial
SQL vs NoSQL
- En las bases de datos NoSQL, los datos no se almacenan en tablas sino en objetos JSON o colecciones de documentos, como en Cloud Firestore.
users
username: "juanwmedia",
lastlogin: 1599040732
username: "guizmo",
lastlogin: 1599040759
username: "nino",
lastlogin: 1599040788
Vue Firebase esencial
SQL vs NoSQL
- En NoSQL colocamos la información relacionada en un lugares donde se pueda descargar en conjunto.
users
id: 321
username: "juanwmedia",
lastlogin: 1599040732
id: 322
username: "guizmo",
lastlogin: 1599040759
is_admin: true
id: 333
username: "nino",
lastlogin: 1599040788
posts
id: 111
title: "Super post",
user_id: 321
username: "juanwmedia"
id: 112
title: "ABC of black cats",
user_id: 321
username: "juanwmedia"
id: 113
title: "Cats are awesome 😺",
user_id: 321
username: "nino"
Vue Firebase esencial
Reglas a tener en cuenta
-
Los documentos tienen límites: 1MB de tamaño y 20.000 campos 🙀.
-
No puedes retornar un documento de forma parcial, todo o nada.
- Las consultas no retornan sub-colecciones.
- Se te cobrará por la cantidad de operaciones de lectura y escritura, no por la cantidad de documentos donde buscar.
Vue Firebase esencial
Estructurar datos
- Todo en el propio documento.
users
id: 321
username: "juanwmedia",
lastlogin: 1599040732,
posts: {
post_111: {
title: "Super post",
username: "juanwmedia"
content: ...
},
post_112: {
title: "ABC of black cats",
username: "juanwmedia"
content: ...
}
}
Accesibilidad de la información.
Nula escalabilidad.
👍
👎
Vue Firebase esencial
Estructurar datos
- Uso de sub-colecciones.
users
id: 321
username: "juanwmedia",
lastlogin: 1599040732
posts
id: 111
title: "Super post",
username: "juanwmedia"
id: 112
title: "ABC of black cats",
username: "juanwmedia"
Control del tamaño del documento principal.
No se pueden eliminar de forma sencilla.
👍
👎
Vue Firebase esencial
Estructurar datos
- Colecciones a nivel raíz (root)
Genial para relaciones many to many.
Mostrar la información de forma anidada o jerárquica.
👍
👎
users
id: 321
username: "juanwmedia",
lastlogin: 1599040732
id: 322
username: "guizmo",
lastlogin: 1599040759
is_admin: true
id: 333
username: "nino",
lastlogin: 1599040788
id: 111
title: "Super post",
user_id: 321
username: "juanwmedia"
id: 112
title: "ABC of black cats",
user_id: 321
username: "juanwmedia"
id: 113
title: "Cats are awesome 😺",
user_id: 321
username: "nino"
posts
Vue Firebase esencial
Índices
- Índices automáticos
Creados de forma automática por cada campo y sub-campo de un documento.
Permiten que todas las consultas básicas sean super rápidas.
nombre | ID |
---|---|
Gabriel | 1CiJAH4TgPojQA3CXUje |
Gerardo | 1oegzA0nt0vPrPYl2NlT |
Guizmo | 8ZmLY5iJQurmayfrQ02e |
Javier | LavXShkGvqYVyCy17HL7 |
Juan | SMxn0ZcR5jfD6LF3AMO3 |
Manuel | VRysMXmgmEpF35H6pkGT |
Miguel | os5RD698ie4bVHhR2P7B |
Vue Firebase esencial
Índices
- Índices compuestos
Se crean bajo demanda.
Permiten realizar consultas compuestas y complejas a mayor velocidad.
nombre | Edad | ID |
---|---|---|
Gabriel | 23 | 1CiJAH4TgPojQA3CXUje |
Gerardo | 55 | 1oegzA0nt0vPrPYl2NlT |
Guizmo | 2 | 8ZmLY5iJQurmayfrQ02e |
Javier | 76 | LavXShkGvqYVyCy17HL7 |
Juan | 40 | SMxn0ZcR5jfD6LF3AMO3 |
Manuel | 32 | VRysMXmgmEpF35H6pkGT |
Miguel | 65 | os5RD698ie4bVHhR2P7B |
Vue Firebase esencial
¿Qué son las Cloud Functions?
- Permiten tener lógica de backend (en lugar de tener todo en el cliente).
- Pueden llegar hasta donde no pueden llegar las reglas de seguridad.
- Se activan cuando un evento en particular se desencadena en tu proyecto Firebase.
- Usuario registrado (Auth).
- Nuevo documento creado (Firestore).
- Subida de archivo (Storage).
- Request HTTP (API personalizada).
Un pequeño servidor Node responde realizando algún tipo de trabajo y devolviendo una respuesta.
Vue Firebase esencial
Cloud Functions: a tener en cuenta
-
Rendimiento. La primera vez pueden tardar más (cold start). Cuanto más se use la función, mayor tiempo permanecerá despierta.
-
Variables globales. No hay comunicación ya que viven en entornos diferentes.
-
Dependencias globales. Se comparten por TODAS las Cloud Functions.
- No existe un orden de ejecución garantizado.
- Pueden llamarse más de una vez (context.eventID).
Vue Firebase esencial
By Juan Andrés Núñez
Vue Firebase esencial
- 519