Diferencia entre revisiones de «PDM Avanzado FireBase Datos Sincronizados na nube»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 146: Línea 146:
  
  
 
+
* Unha vez creado o proxecto temos que [https://firebase.google.com/docs/android/setup?hl=es-419 engadir o FireBase ao proxecto de Android].
  
  

Revisión del 19:14 12 jun 2019

Introdución

  • FireBase é unha plataforma xestionada por Google que permite, entre outras vantaxes, dispoñer dunha API para gardar e sincronizar datos na nube en tempo real.
  • Podemos ver neste enlace os prezos e características para os diferentes plans.
No caso do plan gratuíto, dispoñemos entre outras características, de:
  • 1GB de almacenamento.
  • 200 conexión simultáneas.
  • 10GB ao mes de descarga.
  • Podemos consultar neste outro enlace os límites anteriores tamén os límites a nivel de programación das coleccións que emprega FireBase para gardar información.



Tipos de bases de datos

  • Permite dous tipos de bases de datos:
  • Realtime Database é a base de datos orixinal de Firebase.
  • Tipo de almacenamento: árbore json
  • As bases de datos se limitan á disponibilidade zonal nunha soa rexión
  • O escalamiento necesita fragmentación (se aumentamos o número de conexións ou escrituras por segundo necesitamos dividir a información en varias bases de datos)
  • Cloud Firestore é a opción mais nova cunha serie de vantaxes con respecto a opción anterior, coma:
  • Tipo de almacenamento: Base de datos NoSQL orientada aos documentos. Coleccións de documentos.
Os datos complexos e xerárquivos son máis doados de organizar e escalar. Emprega subcoleccións dentro dos documentos
Permite realizar consultas sobre os datos con filtros máis complexos.
  • As bases de datos son aloxadas en diferentes servidores de diferentes rexións.
  • O escalamiento non necesita fragmentación.


  • No caso de base de datos RealTime Database emprega arquivos json para gardar os datos, polo que teremos que ter coidado coa forma de gardar a información para acceder a ela da forma correcta.
Imaxinemos que temos un chat e queremos gardar esta información (exemplo obtido deste enlace):
 1 {
 2   "chats": {
 3     "one": {
 4       "title": "Historical Tech Pioneers",
 5       "messages": {
 6         "m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." },
 7         "m2": { ... },
 8         // a very long list of messages
 9       }
10     },
11     "two": { ... }
12   }
13 }


Fixarse que a nivel de EE/R <=> relacional, os datos terían a relación de:
  • 1 CHAT (id,título) => N MENSAXES (m1,m2,...)
  • 1 PARTICIPANTE (nome) => N MENSAXES (Cada mensaxe é enviado por un participante do chat)
  • PARTICIPANTE <=> CHAT (un participante pode participar en múltiples chats)
Se na organización json anterior queremos obter o título de todos os chats teríamos que descargar a árbore completa (cando obtemos unha referencia a un nodo en Firebase, temos que descargar todo o que colga del) incluído todas as mensaxes.
Para evitalo poderíamos optar pola seguinte organización:
 1 {
 2   // Chats contains only meta info about each conversation
 3   // stored under the chats's unique ID
 4   "chats": {
 5     "one": {
 6       "title": "Historical Tech Pioneers",
 7       "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
 8       "timestamp": 1459361875666
 9     },
10     "two": { ... },
11     "three": { ... }
12   },
13 
14   // Conversation members are easily accessible
15   // and stored by chat conversation ID
16   "members": {
17     // we'll talk about indices like this below
18     "one": {
19       "ghopper": true,
20       "alovelace": true,
21       "eclarke": true
22     },
23     "two": { ... },
24     "three": { ... }
25   },
26 
27   // Messages are separate from data we may want to iterate quickly
28   // but still easily paginated and queried, and organized by chat
29   // conversation ID
30   "messages": {
31     "one": {
32       "m1": {
33         "name": "eclarke",
34         "message": "The relay seems to be malfunctioning.",
35         "timestamp": 1459361875337
36       },
37       "m2": { ... },
38       "m3": { ... }
39     },
40     "two": { ... },
41     "three": { ... }
42   }
43 }


Como podemos observar a organización é parecida a ter un modelo relacional, xa que temos as entradas cos CHATS, as entradas cos PARTICIPANTES e as entradas coas MENSAXES.
Loxicamente dita organización pode variar en función das necesidades de consulta de información.



Creación do proxecto FireBase

Nota: Analytics é unha ferramenta de Google para obter informes sobre o uso do noso sitio web ou como no caso de aplicacións Web, permite rexistrar eventos que se produzan dende a nosa aplicación (teremos que programar dito rexistro na aplicación móbil). Por exemplo, seleccionar un produto dunha lista sería un bon evento para rexistrar.




Proxecto Android

  • Temos que crear un proxecto Android cun MinSDK API 16 (Jelly Bean) ou superior.
  • Deberemos empregar a versión de Gradle 4.1 ou superior.
  • Os emuladores onde fagamos as probas teñen que ter unha imaxe con Google Play.





-- Ángel D. Fernández González -- (2019).