NoSQL 與關聯式資料庫之間有何差異?

已完成

一般而言,NoSQL 資料庫 (例如 Azure Cosmos DB) 可水平調整且為非關聯式。

水平調整與垂直調整的比較

關聯式資料庫通常會隨著 VM 大小或其所裝載的計算增加而成長。 NoSQL 資料庫會增加更多伺服器或節點來擴大。 這些節點在 Cosmos DB 中也稱為實體分割區。 這些實體分割區上儲存的資料必須經過組織,之後才能高效存取。

藉由每個文件上必要的屬性值,資料就會以可預測的方式,路由傳送至不同實體分割區。 這個屬性稱為容器的分割區索引鍵,必須在建立容器時予以指定。 在容器寫入或讀取資料時傳遞分割區索引鍵,可確保作業效率。

要求分割區索引鍵似乎是種條件約束,但此作法存在一些強大的優點。 一般而言,關聯式資料庫成長幅度上限為 100 TB。 NoSQL 資料庫的成長大小則不受限,而且不會影響從任何單一分割區存取資料的回應時間。

此外,增加分割區時,也會增加更多的計算,因此資料庫支援的處理量會同時提升。

非關聯式與關聯式資料庫的比較

NoSQL 資料庫的第二個顯著特性是,資料片段之間沒有任何類型的外部索引鍵、條件約束或強制關聯性。 由於 NoSQL 資料庫中的資料會儲存在不同實體伺服器上,若強制執行條件約束或關聯性,或在資料上放置鎖定,可能會造成效能不佳或無法預期。

不過,缺少強制執行的關聯性,並不代表無法管理 NoSQL 資料庫中具有關聯性的實體,而是必須採取不同方式。

為什麼這些資料庫類型如此不同?

了解關聯式資料庫的推出如何改變計算經濟效益,有助認識這兩種資料庫類型的差異。

1970 年發明關聯式資料庫時,儲存體和記憶體的成本高於計算。 正規化資料庫模型的目標是要減少重複資料,藉此降低資料庫的成本。 資料庫引擎會套用鎖定和閂鎖,以強制執行嚴格的 ACID (不可部分完成的作業、一致性、隔離、持久性) 語意,因其執行的作業必須同時針對所有必要資料片段。 資料的鎖定可確保資料一致,但在並行、延遲和可用性方面需要取捨。

今日,儲存體和記憶體的成本低於計算,為了實現成本效益,儲存體效率最佳化的必要已不再。 有鑑於工作負載需要更高的並行和可用性水準,且要降低延遲,我們需要新類型的資料庫,針對這類要求達成最佳結果,因此 NoSQL 資料庫應運而生。

也正是基於這些理由,NoSQL 資料庫資料模型化的目標之一,就是確保資料讀取或寫入也能維持計算效率。 部分原因是跨文件聯結等關係運算子不存在於 NoSQL 資料庫中,因此資料必須在應用程式使用時加以儲存,以展現最佳效率。 資料通常必須經過反正規化、複製或以其他方式儲存,藉以中斷許多關聯式資料模型化使用的關聯式正規化規則。

您是否可以將 NoSQL 用於關聯式工作負載?

此時,您可能會想知道 NoSQL 資料庫是否適合用於關聯式工作負載。 答案是肯定的! NoSQL 資料庫絕對可用於存在不同實體間關聯性的工作負載。

關聯式資料庫無法滿足應用程式所需的理想效能、規模或可用性需求時,通常會使用 NoSQL 資料庫。

設計 NoSQL 資料庫的技術與針對關係資料庫模型化其資料的技術不同。 對於具備關聯式資料庫設計經驗的人,這些技巧也不符合直覺。 建置關聯式資料庫的一些最佳做法,不一定能成功轉換到非關聯式資料庫的設計。 設計 NoSQL 資料庫時,這些關聯式資料庫的最佳做法通常屬於反模式。

本課程模組的其餘部分以及進階模型化課程模組中,我們將帶您逐步演練可實現高效能 NoSQL 資料庫的資料模型化技巧。