What is Neo4j?

圖資料庫究竟是什麼?

圖資料庫(Graph database)並不是指專門處理圖像或儲存圖片的資料庫,而是以圖這種資料結構儲存和查詢資料,基本的圖結構包括了節點(Node)、關係 (Relation)和屬性 (Property)三種結構,透過樹狀結構、網狀結構的方式,將各節點之間的關係儲存幾來,特別適合用來儲存複雜的資料關係。

Graph database

關聯式資料庫 RDBMS VS GDBMS 圖形資料庫

database compare

傳統關聯式資料庫資料超多超複雜?

  • 無法滿足巨量資料的管理需求
  • 無法滿足資料高動態即時的需求
  • 無法滿足高可擴展性和高可用性的需求

為什麼要用 Neo4j?

Neo4j 的原生圖資料庫是 分析資料關聯的最佳技術

  • 無須索引的關聯遍歷查詢可以在極短的時間內完成 ,節省 90% CPU
  • Neo4j 的查詢性能比 SQL快上千倍,而 code長度卻只有 1/10 甚至 1/100
  • 獨創的 Cypher 查詢語言 靈活且 易於開發 - Declarative 宣告式查詢 語言

Neo4j 是 最受歡迎的圖資料庫

Neo4j 擁有高靈活性、高可用性及可擴展性,蟬聯 DB-Engines 熱門排名第一名,世界上最先進的 Graph 資料庫。 Neo4j 提供原生的圖資料庫存儲,檢索和處理,是一種開源 NoSQL 資料庫,為開發人員和雲端時代的應用提供前所未見的生產力。 相較於傳統關聯式資料庫,Neo4j 對於巨量資料、跨多個資料庫查詢及安全性有強大的支援;和其他 NoSQL 資料庫相比, Neo4j 採用屬性圖的模型及其專屬 Cypher 語言的特性使得數據更直觀和高效能;透過叢集間不同的角色,可以對 Neo4j 做讀寫分離,並視實際應用在 "安全"、"快速"、"最新資料" 三者之間的優先傾向,透過 AP 的讀寫參數設定上做取捨。因此適用於各種應用場景如金融行業、 IT 營運、網路安全、業務流程、 360 度全方位客戶可視圖應用、即時推薦、社交網路等。 開發人員使用 Neo4j 創造更靈活與敏捷的商業模型,Neo4j 在全球擁有廣大有實力的客戶群。 Itaúe, UBS, Bay, Walmart, Adobe, Cisco, hp, Google 等國際企業都是 Neo4j 的使用者。

neo4j-case

更多特色

基於圖的資料庫

Neo4j 特色:

  • 支持 ACID 的高可用度的開源圖形數據庫。
  • 沒有 Schema 的問題,根據「圖學」的架構設計(Graph Theory)。
  • 資料類型: Node, Label, Property, Relationship。
  • 使用 Cypher query language (CQL),進行類似 SQL 操作。
  • 基於 Java 架構的資料庫系統,運行於 JVM 之上。

Cypher is unique and powerful!

Cypher – 專為 Neo4j 量身打造的圖查詢語言

Cypher 是一種宣告式圖形資料庫查詢語言,具有豐富的表現力,能高效率的查詢和更新圖資料。 當試圖在數據中查找模式時,Cypher 查詢通常比大量的 SQL JOINs 更簡單,更容易編寫。因為 Neo4j 沒有 tables,自然也就不需要煩惱 JOINs 。為了與 SQL 進行比較,下面是一個簡單的 Cypher 查詢,它匹配在類別層次結構中的所有產品 :

Cypher
  
  MATCH (p:Product)-[:CATEGORY]->(l:ProductCategory)-[:PARENT*0..]->(:ProductCategory {name:"Dairy Products"})
  RETURN p.name
                      
                    

下面是 SQL 中類似的查詢,但它更長且更複雜。與 Cypher (深度不受限制)不同,此 SQL 查詢僅選擇三個級別深度。

SQL
  
  SELECT p.ProductName
  FROM Product AS p
  JOIN ProductCategory pc ON (p.CategoryID = pc.CategoryID AND pc.CategoryName = "Dairy Products")
                        
  JOIN ProductCategory pc1 ON (p.CategoryID = pc1.CategoryID)
  JOIN ProductCategory pc2 ON (pc1.ParentID = pc2.CategoryID AND pc2.CategoryName = "Dairy Products")
                        
  JOIN ProductCategory pc3 ON (p.CategoryID = pc3.CategoryID)
  JOIN ProductCategory pc4 ON (pc3.ParentID = pc4.CategoryID)
  JOIN ProductCategory pc5 ON (pc4.ParentID = pc5.CategoryID AND pc5.CategoryName = "Dairy Products")