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

  1. Los documentos tienen límites: 1MB de tamaño y 20.000 campos 🙀.
     
  2. No puedes retornar un documento de forma parcial, todo o nada.
     
  3. Las consultas no retornan sub-colecciones.
     
  4. 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