圖形資料庫和關聯式資料庫有何區別?
圖形資料庫和關聯式資料庫都會儲存具有關係的相關資料項目,但它們表示資料關係的方式大不相同。關聯式資料庫會以包含橫列與直欄的資料表格式儲存資料。所有資料也都會儲存在資料表中,資料之間的關係會以表示參考形式儲存回原始資料表 (也稱為外部索引鍵)。在執行階段,關聯式資料庫會使用 JOIN 陳述式來明確解析這些參考。雖然大多數關聯式資料庫在某些規模下都能有效地執行此操作,但當需要處理大量或未知數量的參考時,例如當您想透過未知數量的連線尋找相關的時候,例如在社交網路中找到兩個人的關係時,這些作業會變得效率低落。
相較之下,圖形資料庫會將資料儲存為實體和關係的網路。圖形資料庫明確儲存實體和關係資料,而不是將資料儲存為參考。在執行階段,圖形資料庫利用數學圖形理論,有效地對實體和關係執行操作。由於實體之間的關係是明確儲存而不是計算的,所以圖形資料庫對具有複雜資料互連的使用案例進行查詢和記憶體管理方面更有效率,這可以顯著提升應用程式效能。
資料模型:圖形資料庫與關聯式資料庫
圖形資料庫和關聯式資料庫都會儲存資訊,並且表示資料之間的關係。但是,關聯式模型優先處理資料實體,而圖形模型優先處理實體之間的關係。
關聯式資料庫模型
關聯式資料庫使用將資訊組織成列和欄的資料表。欄會保留資料實體的特定屬性,而列則代表個別資料記錄。
關聯式資料庫的固定結構描述需要您預先概述資料表與主索引鍵和外部索引鍵之間的關係。
範例
考慮一個社交媒體應用程式,其中包含可能彼此是朋友的客戶描述檔。典型模型需要兩個資料表來建模此資料。
客戶資料表可能如下所示:
ID |
名稱 |
位置 |
C1 |
Alejandro |
美國 |
C2 |
Ana |
美國 |
C3 |
Kwaku |
美國 |
C4 |
Pat |
美國 |
朋友資料表可能如下所示:
客戶 ID |
朋友 ID |
C1 |
C2 |
C1 |
C3 |
C2 |
C4 |
C2 |
C1 |
C3 |
C1 |
C3 |
C4 |
在查詢時,如果您想要回答「Alejandro 的朋友叫什麼名字?」這樣的問題,資料庫引擎會先尋找 Alejandro 的 Customer (客戶) 資料表中的資料列。
ID |
名稱 |
位置 |
C1 |
Alejandro |
美國 |
接下來,引擎會使用他的 ID 為 Alejandro 建立朋友資料表中所有資料列的聯合
ID |
名稱 |
位置 |
客戶 ID |
朋友 ID |
C1 |
Alejandro |
美國 |
C1 |
C2 |
C1 |
Alejandro |
美國 |
C1 |
C3 |
現在,對於每個資料列,引擎會為每個好友 ID 將一個聯合建立回「客戶」資料表
ID |
名稱 |
位置 |
客戶 ID |
朋友 ID |
ID |
名稱 |
位置 |
C1 |
Alejandro |
美國 |
C1 |
C2 |
C2 |
Ana |
美國 |
C1 |
Alejandro |
美國 |
C1 |
C3 |
C3 |
Kwaku |
美國 |
最後,引擎會傳回他的朋友的名字。
名稱 |
Ana |
Kwaku |
正如我們所見,當我們在關聯式資料中使用連接時,我們最終會建置一個大型資料結構來表示我們想要擷取的資訊。雖然關聯式資料庫內含最佳化功能,將這些結構造成的影響降至最低,但隨著聯結數量越來越大,所需的資料量會顯著增加,進而降低效能並增加記憶體用量。
圖形資料庫模型
另一方面,圖形資料庫使用具有屬性、關係和物件的圖形結構來表示資料。節點是物件,邊緣展示這些節點之間的關係,屬性則描述節點和邊緣的屬性。這種動態結構使得圖形資料庫可用於表示互連的資料。圖形資料庫在關係和資料類型方面提供更大的靈活性。
範例
使用與上述相同的範例社交網路資料,我們的圖形資料庫會使用 3 個節點來儲存資料,每個節點具有 4 個屬性和 2 個邊緣。
現在,讓我們看看圖形資料庫如何處理查詢「Alejandro 的朋友叫什麼名字?」。
首先,我們會尋找代表 Alejandro 的「客戶」節點 (在下方反白顯示)。
接下來,我們將會周遊,或在我們的朋友邊緣之間移動。在圖形資料庫中周遊類似於在關聯式資料庫中執行 JOIN,不同之處是除非明確要求,否則不會保留查詢中先前的資訊。在我們的以下範例中,只會在記憶體中保留兩個朋友邊緣。
第三,我們繼續周遊到相鄰節點。
最後,引擎會傳回他的朋友的名字。
名稱 |
Ana |
Kwaku |
正如我們所見,這兩個引擎都能夠傳回相同的資訊,但是在周遊許多連線時,在圖形資料庫中關係的明確儲存可使其更有效地處理此請求。雖然這個優勢對於簡單查詢 (例如此處所示的查詢) 並不顯著,但此最佳化以及圖形查詢語言的結構,可以大幅降低需要多次或無數次周遊這些關係以處理問題的複雜度和記憶體用量。
主要區別:圖形資料庫與關聯式資料庫
除了不同的資料模型之外,關聯式和圖形資料庫在功能和效用方面也有諸多顯著的差異。
查詢
圖形資料庫使用自訂查詢語言,這些語言經過最佳化,可以快速尋找和擷取連線資料。這些語言,例如 TinkerPop Gremlin、OpenCypher 和 SPARQL 是專門建置的簡化撰寫查詢,利用複雜的資料互連,例如遞迴資料存取、路徑尋找和圖形演算法等操作所需的複雜資料互連。
相比之下,關聯式資料庫使用 SQL 來擷取和操作資料。使用 SQL,使用者可以在資料表上執行各種類型的查詢,例如 SELECT、INSERT、UPDATE 和 DELETE。關聯式資料庫擅長處理資料表之間具有定義良好關係的結構化資料。此類資料庫對於跨多個資料表執行複雜的篩選、彙總和聯結特別有效。
效能
圖形資料庫將物件和關係儲存為資料,並使用索引以有效地在相關實體之間周遊。由於圖形資料庫將關係儲存為資料,因此資料庫可以在實體之間快速瀏覽,而無需動態計算這些連線。節點之間的直接連線可實現即時存取,因此您可以快速查詢和追蹤關係。這些功能使圖形資料庫非常高效。
相比之下,關聯式資料庫使用索引查詢,並動態計算聯結以識別實體之間的關係。可以聯結多個資料表,但此操作非常耗時,因為系統必須掃描更多資料上的更大規模索引。因此,關聯式資料庫無法針對需要大量連線才能擷取所需資料的使用案例,提供與圖形資料庫相同的效能。
易用性
圖形資料庫以關係為中心,可讓您在使用連線資料時輕鬆處理此類資料庫。這些資料庫擅長多躍點查詢,在此類查詢中會遍歷具有多個關係的路徑。您也可以使用圖形查詢語言,例如 SPARQL、Gremlin 或 OpenCypher,以簡單的圖形特定語法來表達查詢,探索互連的資料。
關聯式資料庫使用 SQL,在管理多躍點查詢時,此類語言可能會讓您感到不自然。如果查詢具有多個聯結且跨越巢狀子查詢,則很難編寫相應的 SQL 語句。如果您不夠謹慎,這很容易轉換為難以閱讀和維護的笨重查詢。
話雖如此,關聯式資料庫已發展成熟,在各種使用案例中廣受歡迎。可以使用多種工具和資源以及社群支援來最佳化系統。
使用時機:圖形資料庫與關聯式資料庫
圖形資料庫和關聯式資料庫均有許多有效的使用案例。兩種資料庫具有不同的資料模型和幾點核心差異,因此它們在不同領域表現出色。
圖形資料庫
圖形資料庫提供靈活的結構描述,可動態變更和調整資料。此類資料庫關注資料關係,在分析、語義搜尋或推薦引擎中非常有用。在下列情況中,圖形資料庫是更理想的選擇:
- 您正在處理具有複雜關係的資料,例如社交網路、欺詐偵測、知識圖形、安全圖或個人化建議引擎
- 您需要不斷演變的結構描述,因為這樣可以修改邊緣、節點和屬性,而不會干擾資料庫結構的其餘部分
- 您正在處理互連的資料,並且需要在關係之間進行多次或未知次數的跳躍 (「朋友的朋友」類型查詢)
圖形資料庫具備靈活性、可擴展性和動態性,並且擅長顯示資料之間的關係。
關聯式資料庫
關聯式資料庫提供結構化結構描述,提供出色的資料完整性支援。在下列情況中,關聯式資料庫是更理想的選擇:
- 您需要 ACID 合規性以及高水準的資料完整性和一致性,例如在金融交易中
- 您正在使用非常適合表格式資料模型的高度結構化資料,例如在企業資源管理中
- 您的資料包含有限的關係
差異摘要:關聯式資料庫與圖形資料庫
關聯式資料庫 |
圖形資料庫 |
|
型號 |
帶有列和欄的資料表。 |
帶有表示為節點和邊緣的資料的互連節點 |
操作 |
SQL 操作,如建立、讀取、更新和刪除 (CRUD)。 |
操作包括 CRUD 和圖形周遊操作 |
效能 |
在遍歷可能會降低效能的關係時,關聯式資料庫會面臨複雜的查詢。 |
圖形資料庫擅長表示和查詢連線資料之間的關係。 |
易用性 |
關聯式資料庫適用於大型資料集和結構化資料。此類資料庫很難處理多躍點查詢。 |
在處理以關係為中心的資料時,圖形資料庫便於使用。使用圖形查詢語言,可以快速查詢多個躍點的資料。 |
AWS 如何協助滿足您的關聯式和圖形資料庫要求?
Amazon Web Services (AWS) 提供適用於關聯式和圖形資料庫使用案例的解決方案。
關聯式資料庫
Amazon Relational Database Service (Amazon RDS) 是一項受管服務,方便在雲端設定、操作和擴展關聯式資料庫。它提供經濟實惠而且可調整大小的容量,同時還能管理耗時的資料庫管理任務。Amazon RDS 支援多種資料庫引擎,如下所示:
- Amazon Relational Database Service (Amazon RDS) for SQL Server
- Amazon Relational Database Service (Amazon RDS) for MySQL
- Amazon Relational Database Service (Amazon RDS) for MariaDB
- Amazon Relational Database Service (Amazon RDS) for Oracle
- Amazon Relational Database Service (Amazon RDS) for PostgreSQL
- Amazon Relational Database Service (Amazon RDS) for Db2
Amazon Aurora 是一種現代化關聯式資料庫服務,可大規模提供效能和高可用性、完全開放原始碼 MySQL 和 PostgreSQL 相容版本。Aurora 也是一項全受管服務,可自動執行硬體佈建、資料庫設定、修補和備份等耗時的管理任務,同時以十分之一的成本提供商業資料庫的安全性、可用性和可靠性。
圖形資料庫
Amazon Neptune 是專門打造的高效能圖形資料庫引擎。該引擎經過最佳化,可以儲存數十億個關係,並以毫秒級的延遲查詢圖形。
Neptune 支援流行的圖形模型 — 屬性圖形和 W3C 的資源描述框架 (RDF)。它也支援 Gremlin 和 SPARQL 等查詢語言,因此您可以建置導覽高度連線資料集的查詢。
Neptune 提供多個功能:
- Neptune 具有高可用性、僅供讀取複本、point-in-time 恢復、連續備份,並可跨可用區域進行複寫。
- Neptune 非常安全,支援靜態加密。
- Neptune 全受管。因此,您不用再擔心硬體佈建、軟體修補、安裝、組態或備份等資料庫管理任務。
立即建立帳戶,開始使用 AWS 上的圖形和關聯式資料庫。