您好,登錄后才能下訂單哦!
這篇“圖數據庫是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“圖數據庫是什么”文章吧。
隨著社交、電商、金融、零售、物聯網等行業的快速發展,現實社會織起了了一張龐大而復雜的關系網,傳統數據庫很難處理關系運算。
大數據行業需要處理的數據之間的關系隨數據量呈幾何級數增長,亟需一種支持海量復雜數據關系運算的數據庫,圖數據庫應運而生。
世界上很多著名的公司都在使用圖數據庫。比如:
社交領域 :Facebook, Twitter,Linkedin用它來管理社交關系,實現好友推薦
零售領域 :eBay,沃爾瑪使用它實現商品實時推薦,給買家更好的購物體驗
金融領域 :摩根大通,花旗和瑞銀等銀行在用圖數據庫做風控處理
汽車制造領域 :沃爾沃,戴姆勒和豐田等頂級汽車制造商依靠圖數據庫推動創新制造解決方案
電信領域 :Verizon, Orange和AT&T 等電信公司依靠圖數據庫來管理網絡,控制訪問并支持客戶360
酒店領域 :萬豪和雅高酒店等頂級酒店公司依使用圖數據庫來管理復雜且快速變化的庫存
既然圖數據庫應用這么廣泛,越來越多的企業和開發者開始使用它,那它究竟有什么過人之處呢,下面我們來揭開它的神秘面紗。
學過數據結構這么課程的同學腦海中應該或多或少有圖的概念。
圖由兩個元素組成:節點 和 關系 。
每個節點代表一個實體(人,地,事物,類別或其他數據),每個關系代表兩個節點的關聯方式。
這種通用結構可以對各種場景進行建模 - 從道路系統到設備網絡,到人口的病史或由關系定義的任何其他事物。
`圖數據庫(Graph database)`` 并非指存儲圖片的數據庫,而是以圖這種數據結構存儲和查詢數據。
圖形數據庫是一種在線數據庫管理系統,具有處理圖形數據模型的創建,讀取,更新和刪除(CRUD)操作。
與其他數據庫不同, 關系在圖數據庫中占首要地位。這意味著應用程序不必使用外鍵或帶外處理(如MapReduce)來推斷數據連接。
與關系數據庫或其他NoSQL數據庫相比,圖數據庫的數據模型也更加簡單,更具表現力。
圖形數據庫是為與事務(OLTP)系統一起使用而構建的,并且在設計時考慮了事務完整性和操作可用性。
根據存儲和處理模型不同,市面上圖數據庫也有一些區分。
比如:
Neo4J 就是屬于原生圖數據庫,它使用的后端存儲是專門為Neo4J這種圖數據庫定制和優化的,理論上說能更有利于發揮圖數據庫的性能。
而 JanusGraph 不是原生圖數據庫,而將數據存儲在其他系統上,比如Hbase。
一些圖數據庫使用 原生圖存儲 ,這類存儲是經過優化的,并且是專門為了存儲和管理圖而設計的。
并不是所有圖數據庫都是使用原生圖存儲,也有一些圖數據庫將圖數據序列化,然后保存到關系型數據庫或者面向對象數據庫,或其他通用數據存儲中。
原生圖處理(也稱為 無索引鄰接 )是處理圖數據的最有效方法,因為連接的節點在數據庫中物理地 指向彼此。非本機圖處理使用其他方法來處理CRUD操作。
NoSQL數據庫大致可以分為四類:
鍵值(key/value)數據庫
列存儲數據庫
文檔型數據庫
圖數據庫
與關系型數據庫對比
關系型數據庫實際上是不擅長處理關系的。很多場景下,你的業務需求完全超出了當前的數據庫架構。
舉個栗子:假設某關系型數據庫中有這么幾張用戶、訂單、商品表:
當我們要查詢:“用戶購買了那些商品?” 或者 “該商品有哪些客戶購買過?” 需要開發人員JOIN幾張表,效率非常低下。
而“購買該產品的客戶還購買了哪些商品?”類似的查詢幾乎不可能實現。
在數據關系中心,圖形數據庫在查詢速度方面非常高效,即使對于深度和復雜的查詢也是如此。在《Neo4j in Action》這本書中,作者在關系型數據庫和圖數據庫(Neo4j)之間進行了實驗。
他們的實驗試圖在一個社交網絡里找到最大深度為5的朋友的朋友。他們的數據集包括100萬人,每人約有50個朋友。
實驗結果如下:
在深度為2時(即朋友的朋友),兩種數據庫性能相差不是很明顯;深度為3時(即朋友的朋友的朋友),很明顯,關系型數據庫的響應時間30s,已經變得不可接受了;深度到4時,關系數據庫需要近半個小時才能返回結果,使其無法應用于在線系統;深度到5時,關系型數據庫已經無法完成查詢。
而對于圖數據庫Neo4J,深度從3到5,其響應時間均在3秒以內。
可以看出,對于圖數據庫來說,數據量越大,越復雜的關聯查詢,約有利于體現其優勢。從深度為4/5的查詢結果我們可以看出,圖數據庫返回了整個社交網絡一半以上的人數。
根據DB-Engines最新發布的圖數據庫排名,Neo4J仍然大幅領先排在第一位:
Neo4J是由Java實現的開源圖數據庫。自2003年開始開發,直到2007年正式發布第一版,并托管于GitHub上。
Neo4J支持ACID,集群、備份和故障轉移。目前Neo4J最新版本為3.5,分為社區版和企業版,社區版只支持單機部署,功能受限。企業版支持主從復制和讀寫分離,包含可視化管理工具。
JanusGraph是一個Linux基金會下的開源分布式圖數據庫。
JanusGraph提供Apache2.0軟件許可證。該項目由IBM、Google、Hortonworks支持。
JanusGraph是由TitanDB圖數據庫修改而來,TitanDB從2012年開始開發。目前最新版本為0.3.1。
JanusGraph支持多種儲存后端(包括Apache Cassandra、Apache HBase、Bigtable、Berkeley DB)。JanusGraph的可擴展性取決于與JanusGraph一起使用的基礎技術。
例如,通過使用Apache Cassandra作為存儲后端,可以將JanusGraph簡單地擴展到多個數據中心。
JanusGraph通過與大數據平臺(Apache Spark,Apache Giraph,Apache Hadoop)集成,支持全局圖數據的分析、報告和ETL。
JanusGraph通過外部索引存儲(Elasticsearch,Solr,Lucene)支持地理、數字范圍和全文搜索。
節點是主要的數據元素
節點通過關系連接到其他節點
節點可以具有一個或多個屬性 (即,存儲為鍵/值對的屬性)
節點有一個或多個標簽 ,用于描述其在圖表中的作用
示例:人員節點與Car節點
關系連接兩個節點 關系是方向性的 節點 可以有多個甚至遞歸的關系 關系可以有一個或多個屬性(即存儲為鍵/值對的屬性)
屬性是命名值,其中名稱(或鍵)是字符串
屬性可以被索引和約束
可以從多個屬性創建復合索引
標簽用于將 節點 分組
一個節點可以具有多個標簽
對標簽進行索引以加速在圖中查找節點
本機標簽索引針對速度進行了優化
Cypher是Neo4j的圖形查詢語言,允許用戶存儲和檢索圖形數據庫中的數據。
舉例,我們要查找Joe的所以二度好友:
查詢語句如下:
MATCH
(person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
(foaf:Person)
WHERE
person.name = "Joe"
AND NOT (person)-[:KNOWS]-(foaf)
RETURN
foaf
Joe認識Sally,Sally認識Anna。Bob被排除在結果之外,因為除了通過Sally成為二級朋友之外,他還是一級朋友。
以上就是關于“圖數據庫是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。