終於把 Object.defineProperty() 系列寫完了,因為要研究 Vue.js 背後的原理多花了不少時間,但也收穫不少呢。好,就讓我們來再研究新的題目吧。
剛好最近在寫專案,有在使用 Google Firebase 的 Cloud Firestore ,作為該網站的資料庫,以節省還要開後端伺服器的維運成本。所以這幾天就來聊聊 Cloud Firestore 的使用吧!
看看標題,Cloud Firestore 後面有個 β,這是什麼意思?不要懷疑,這個服務還在公開測試階段,所以不建議用在正式的產品,寫點簡單的專案增加開發速度和節省成本倒是不錯,也算是先學習著,以後正式版推出就可以和有興趣的人分享了。
在正式開始寫研究筆記前,今天就先和大家聊聊自身的使用情境吧。今天的需求是希望寫一個網站,並能顯現某些資料的圖表,但是因為這些資料的來源通常都是用 Parser 定期抓來的,而不用與人互動,所以不一定要寫成具有後端服務網站,而考慮將資料存在某個地方,可能透過純文字檔案格式去存、或是找個服務,在研究過幾回後,決定將透過 Parser 定期去爬,把資料存在 Firebase,然後再寫一個純前端網站去抓資料,並顯示成圖表。
而這時發現 Firebase 現在除了原本的 Realtime Database 外,多了一個處於測試版的 Cloud Firestore,既然是小專案,趁機去學習新的技術我想是個不錯的計畫。雖然是這樣選,還是在這篇的最後簡單介紹兩者的差異吧!對於詳細的比較可以參見官方的文件。
在資料模型上,兩者都是屬於 NoSQL Databases。Realtime Database 是將資料存成一個巨大的 JSON 樹,而 Cloud Firestore 是將資料存在被組織在 collections 中的 documents 裡。兩者在使用上都很相似於 JSON 的操作,但後者比較能儲存複雜的分層資料。另外前者在過去的使用經驗上,是可以直接將整份資料匯出成一個 JSON 檔,而後者目前還沒看到有實作匯出功能,推估可能也和資料儲存模型不同有關。
在查詢功能,Cloud Firestore 是強於 Realtime Database 的。Realtime Database 在單次查詢中只能對某個屬性做排序(sort)或過濾(filter/where),不能並行操作,但是 Cloud Firestore 不但支援同時進行,亦可有多數個過濾條件。
兩者都支援交易(transactions),但是 Cloud Firestore 亦支援批次寫入,也就是能一次將多個操作在一個 Request 送出,減少連線次數與成本。
事實上,兩者差異仍有不少點,但今天就針對幾個比較容易使用到的部分做比較吧。明天就讓我來試玩看看囉。