keyboard_tabSkip to content
listVue Firebase Masterclass

ความแตกต่างระหว่าง Realtime DB และ Firestore DB

สารบัญ

Document ต้นฉบับ: https://firebase.google.com/docs/firestore/query-data/listen

อันที่จริงแล้ว Firestore ก็ทำ Realtime ได้ เราจะมาลองเพิ่มการทำ Realtime กันดูบ้าง

เพิ่ม realtime Firestore

เพิ่มการใช้งาน realtime Firestore ด้วย

  • ปรับการดึง Product ให้ realtime แทนที่จะดึงด้วย query ทีละครั้ง
  • เมื่อแก้ไขจาก Backoffice = แสดงข้อมูล product ใหม่ออกมาทันที

แก้เพียงแค่ file เดียวคือ

javascript
import { defineStore } from 'pinia'

import {
  collection,
  getDocs,
  query,
  where,
  onSnapshot // เพิ่มการรับแบบ realtime เข้ามา
} from 'firebase/firestore'

import { db } from '@/firebase'

export const useUserProductStore = defineStore('user-product', {
  state: () => ({
    list: [],
    loaded: false,
    page: 1,
    limit: 2
  }),
  actions: {
    async loadProduct () {
      const productsCol = query(collection(db, 'products'), where('status', '==', 'open'))

      onSnapshot(productsCol, (snapshot) => {
        this.list = snapshot.docs.map(doc => ({
          productId: doc.id,
          ...doc.data()
        }))
      })
    }
  }
})

ผลลัพธ์

firestore-01

ความแตกต่างระหว่าง Realtime DB และ Firestore

Document ต้นฉบับ: https://firebase.google.com/docs/database/rtdb-vs-firestore

ด้วยความที่ Firestore และ Realtime Database นั้นสามารถทำ Realtime ได้เหมือนกัน การพิจารณาว่าจะใช้ Realtime กับ Database แบบไหน ปกติเรามักจะคำนึงถึงเรื่องต่อไปนี้

  1. ในแง่ cost รูปแบบการคิด Cost ของ Realtime DB และ Firestore ต่างกันใหญ่ๆที่ 3 จุดคือ
  • จำนวน connection
    • Realtime DB จะกำหนดไว้สูงสุดอยุ่ที่ 200k / database
    • Firestore ไม่ได้กำหนดในจุดนี้ = connection ไม่จำกัด
  • จำนวนการ Read / Write Database
    • Realtime DB ไม่คิดตาม read / write database (คิดเป็นค่าดึงข้อมูลแทน)
    • Firestore คิดทั้งหมดตั้งแต่ read / write / delete
  • การทำ offline (เมื่อต้อง query บ่อย)
    • Realtime DB ทำได้เป็น basic offline (เหมือน localstorage)
    • Firestore ทำ offline กับ query และทำ sync ได้ (แม้จะเป็น offline mode) = สามารถประหยัด read / write ผ่านการทำสิ่งนี้ (อย่างถูกต้อง) ได้
  1. ในแง่การใช้งาน รูปแบบของ Database ที่เก็บและรูปแบบการดึงข้อมูลมีจุดที่แตกต่างกันคือ
  • Realtime DB: query ไม่ได้ ทำได้เป็นเคสเรียงข้อมูลออกมา
  • Firestore: query ได้ (ตามบท Firestore)

ที่เหลือส่วนตัวมองว่าเป็นจุดพิจารณาทั่วไป (มีแบบถาม / ตอบในเว็บ Firebase ให้ด้วยนะว่า เราเหมาะกับ DB แบบไหน)

ดังนั้น ถ้ามองในแง่ Realtime

  • ถ้าการ Realtime ด้วยข้อมูลขนาดไม่ใหญ่ แต่ต้องมีการอ่านบ่อยๆ เขียนบ่อยๆ = Realtime DB จะ save cost ได้มากกว่า (Firestore จะ save cost ได้แค่ขา read แต่ write ยังคิดเหมือนเดิม)
  • ถ้า Realtime ข้อมูลขนาดใหญ่ และมี query ที่ complex (เช่นการ search) = Firestore + Offline cache (ในหัวข้อ Firebase bundle เราได้มีแนะนำเรื่องนี้เพิ่มเติมไป เพื่อจะไม่โดน cost จากการ query ทุกช็อตได้)