Google Cloud Platform - Học về Firebase (Part 1)

Nói về Google Cloud Platform, thì trên internet có rất nhiều bài viết giới thiệu tổng quan cũng như chi tiết về GCP. Nên ở bài viết này, mình sẽ chỉ chia sẻ về các kiến thức mà bản thân đánh giá là quan trọng, cần nắm được khi thực hiện develop trên GCP. Tổng quan về GCP, và các chức năng của nó có thể tóm gón trong image bên dưới

Về FileStore

Cấu trúc data

Hình dung về cấu trúc data của FileStore đơn giản như bên dưới

Cụ thể hơn 1 chút, sẽ là như thế này

Data bên trong Document sẽ lưu kiểu tương tự như JSON

Ở version trước của FileStore (RealtimeDatabase) thì vẫn chưa có khái niệm SubCollection. Nhưng ở Cloud FileStore thì đã có thể setup được SubCollection, giúp cho cấu trúc data có thể đối ứng được với những yêu cầu phức tạp hơn rất nhiều

SubCollection : bên trong database của Cloud Firestore thì có nhiều Collection, và bên trong các Collection đó ta cũng có thể cấu trúc cho bao gồm các Document mà có SubCollection bên trong Document đó được

Firebase Console thực tế

Cách tham chiếu data

Point quan trọng khi thiết kế cấu trúc database cần phải chú ý là :

  • Hướng đến mục tiêu code simple
  • Việc Phẳng hóa thực chất không quan trọng, không phải là mục tiêu nên hướng tới
  • Mục tiêu nên hướng tới là nên làm theo hướng "Giống như với cách mà user nhìn thấy"

Cách get data

Về phương pháp get data từ Filestore thì có 2 pattern :

  1. Đọc và get data 1 lần
  2. Listen theo realtime update (set của observer)

Flow get data từ Filestore :

  1. Tạo tham chiếu tới data.
  2. Get snapshot từ tham chiếu
  3. Get data từ snapshot (sử dụng method .data(), hoặc method .get(<field name>))

Trường hợp đọc và get data 1 lần --> sử dụng method .get()

  • Get document :

    ${documentRef}.get() => DocumentSnapshot

    Nếu là document ở layer tầng trên thì sẽ không get subcollection, mà chỉ get document thôi

  • Get collection (get nhiều document) :

    ${collectionRef}.get() => QuerySnapshot

    Bên trong properties docs của QuerySnapshot, thì các array của DocumentSnapshot được lưu trong đó. Nếu muốn get document thì sẽ viết kiểu như thế này

    record = querySnapshot[0].data()

  • Get list subcollection của document :

    ${documentRef}.getCollections() => CollectionReference

    ※Không thể sử dụng ở library của mobile, web client, nhưng có thể sử dụng ở Cloud function

Trường hợp listen theo realtime update --> sử dụng method .onSnapshot()

(To be continued)