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

已完成

Azure Cosmos DB 的特點為既是非關聯式且可水平調整。

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

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

系統會使用每個文件上的必要屬性值,將資料路由至不同實體的分割區。 這個屬性稱為容器的分割區索引鍵,必須在建立容器時予以指定。 從容器寫入或讀取資料時傳遞分割區索引鍵,可確保作業只會將要求導向儲存所在的分割區,以確保作業更有效率。

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

此外,增加分割區時,也會增加更多的計算,因此資料庫支援的處理量會同時提升。 這表示它也可以支援更多並行使用者。 同時不會影響效能。

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

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

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

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

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

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

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

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

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

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

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

設計 NoSQL 資料庫的技術與針對關係資料庫模型化其資料的技術不同。 對於具備關聯式資料庫設計經驗的人,這些技巧也不符合直覺。 您所了解用於建置關聯式資料庫的部分最佳做法,在您設計 NoSQL 資料庫時往往為反面模式。

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