架構決策記錄:揀資料庫技術
狀態
已接納
背景
我哋正設計一個新應用程式,需要以可擴展而且高效能嘅方式儲存同擷取數據。我哋確定咗三類常用嘅資料庫技術:關聯式資料庫、文件資料庫同事件資料庫。
關聯式資料庫將數據儲存喺結構固定嘅表格入面,並強制執行嚴格嘅數據完整性約束。佢哋適合需要複雜數據關係同交易嘅應用程式。例子包括 MySQL、PostgreSQL 同 Oracle。
文件資料庫將數據儲存喺類似 JSON 嘅文件入面,而且冇固定結構(schema-less)。佢哋非常適合需要靈活數據模型同水平擴展嘅應用程式。例子包括 MongoDB、Couchbase 同 Amazon DynamoDB。
事件資料庫將數據儲存為一系列事件,記錄數據嘅每一次變更。佢哋適合需要審計、事件溯源(event sourcing)同複雜數據處理嘅應用程式。例子包括 Apache Kafka、Apache Pulsar 同 AWS Kinesis。 決策
仔細評估咗我哋應用程式嘅需求同限制之後,我哋決定用文件資料庫。
理據
我哋揀選文件資料庫,原因如下:
我哋嘅應用程式需要一個可以隨時間演進嘅靈活數據模型。文件資料庫容許我哋以冇固定結構嘅格式儲存數據,意味住我哋可以新增欄位或者更改現有文件嘅結構,而無須修改資料庫結構。
我哋嘅應用程式需要水平擴展,以處理大量數據同流量。文件資料庫內置分片(sharding)同複製支援,令我哋可以將數據分佈到多部伺服器,並處理高讀寫吞吐量。
我哋嘅應用程式需要快速而高效嘅數據擷取。文件資料庫提供強大嘅索引同查詢能力,令我哋可以快速而高效咁擷取數據。
我哋嘅應用程式唔需要複雜交易或者數據關係。關聯式資料庫雖然擅長強制執行數據完整性約束同處理複雜交易,但我哋嘅應用程式冇呢啲需求。文件資料庫可以為我哋嘅使用情況提供足夠嘅一致性同持久性保證。
後果
揀選文件資料庫之後,我哋需要投入時間學習同了解我哋選用嘅具體技術。此外,我哋需要確保應用程式嘅數據模型同文件資料庫嘅數據模型配合得宜,以發揮最佳效能同可擴展性。
不過,我哋相信使用文件資料庫嘅好處大過成本,而且佢最配合我哋應用程式嘅需求同限制。