ความแตกต่างระหว่าง 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 เดียวคือ
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()
}))
})
}
}
})
ผลลัพธ์
ความแตกต่างระหว่าง Realtime DB และ Firestore
Document ต้นฉบับ: https://firebase.google.com/docs/database/rtdb-vs-firestore
ด้วยความที่ Firestore และ Realtime Database นั้นสามารถทำ Realtime ได้เหมือนกัน การพิจารณาว่าจะใช้ Realtime กับ Database แบบไหน ปกติเรามักจะคำนึงถึงเรื่องต่อไปนี้
- ในแง่ 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 ผ่านการทำสิ่งนี้ (อย่างถูกต้อง) ได้
- ในแง่การใช้งาน รูปแบบของ 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 ทุกช็อตได้)