在規劃專案之資料表前,想先插播介紹關於 Firebase 的資料庫運作原理,此部分並不影響專案規劃之順序,因為這是在規畫專案前也必須知道的重要事項之一。
過往我開發網站的經驗,都是使用 PostgreSQL 和 MySQL 居多,也就是大家常聽見的關聯式資料表 RDBMS(Relational Database Menagement System),通常會根據不同作用功能,將資料以一個或多個資料表(table)的方式存放,透過結構化的定義表格、列、欄、索引、表格之間的關係,資料彼此之間會有明確關聯性是其最大特點。
然而對應地,在 Firebase 中,則是主打即時更新同步功能,採用 NoSQL(Not Only SQL) 這種非關聯式資料庫概念,將資料儲存在類似 JSON 的文件中。
較被大眾所知的 Amazon 的雲端服務 AWS S3,也是使用 NoSQL 的資料庫服務,處理大量、非結構化或多變的資料架構。這麼說還是很模糊,那就讓我們繼續探討…
NoSQL(Not Only SQL) 是如何運行的?
NoSQL 一詞大約從 1998 年代出現,英文全名為 Not Only SQL,不只是 SQL,也稱為「非關聯式」、「NoSQL DB」或「非 SQL」。它以多種資料模型來存取與管理資料,並透過放寬有別於傳統關聯式資料庫的一些資料一致性限制,針對需要大量資料、低延遲和彈性資料模型的應用程式進行優化。
存取資料的方式,則必須使用資料庫系統所提供的 API 才能夠做新增、修改、刪除資料的動作,也就是需要透過程式語言呼叫特定的函式,或是使用資料庫系統所提供的指令,遠端連線執行後才能存取資料。
NoSQL(Not Only SQL) 的四種主流類型
- 索引鍵值資料庫(Key-Value Database)
這是最具彈性的 NoSQL 資料庫類型,因為應用程式可完全控制值欄位中儲存的項目,而沒有任何限制。使用案例有 Google 的 BigTable、Hadoop 的 HBase、Amazon 的 Dynamo 分散式資料庫等。 - 文件資料庫(Document Database)
也稱為文件存放區或文件導向資料庫,這些資料庫可用來儲存、擷取和管理半結構化資料。可以想像成把資料存放在 document 資料庫模型裡。而在 document 這個模型中,是 key-value 的有序集合。最特別的是,資料庫中的每個 doucment 不需要具有相同的數據結構。本專案使用之 Firebase 的資料庫則是運用此概念。 - 圖學資料庫(Graph Database)
此資料庫方便建造資料節點之關係,支援更豐富且更完整的資料呈現方式。常見的使用案例包括社群聯網、推薦引擎、詐欺偵測和知識結構圖。 - 記憶體資料庫(In-memory Database)
將資料儲存在記憶體的 NoSQL 資料庫,只是這類資料庫改將資料儲存在記憶體中來提高讀取效率,大多用來快取常用網頁遊戲、廣告技術與即時分析等,可加快傳遞網頁的速度,減少讀取硬碟的次數。實際應用案例像是 Amazon MemoryDB for Redis。
NoSQL(Not Only SQL) 之優劣分析
主要優點是它們能夠處理大量的結構化或半結構化數據,更容易擴展、靈活性超高,並且能夠提供高效能。但對應來說,數據的一致性和完整性,與缺乏標準化則是 NoSQL 資料庫的主要問題,因為它沒有通用的標準語言,不同的 NoSQL 資料庫之間存在很大的差異,不像關聯式資料庫通用 SQL 語法。
結語與相關文獻
非關聯式資料庫在各文獻中強調的都是即時與彈性,雖然是相對陌生之資訊,但藉由此 side project 的發想,有機會接觸並藉由各網路文獻與資源統整出上述內容,也算是一種學習成長,對後續要規劃專案資料表時,能有初步的概念。
如同前述的缺點,在本專案使用的 Firebase 服務中,使用數據服務(NoSQL)時,就需要匯入(或說引用)一個套件和使用一組函式來操作資料庫,個人覺得學習曲線較 SQL 程式語言稍微再高一點,但因為官方文件相當齊全、函式名稱也很易懂,且就像前面所提到的是以 key-value 方式儲存,所以不需太擔心不知道如何使用,後續實作時會再一一介紹!
NoSQL
什麽是 NoSQL?
What is AWS S3? Powerful Features with Minimal Complexity
What is NoSQL?