neo4j介紹

Neo4j

在介紹Neo4j是如何實現全球性架構擴充套件能力之前,讓我們先了解一下這個功能是構建在之前版本的哪一個模組之上,還是一個全新的功能呢?

在Neo4j 3.1版本時代,曾經推出的一個全新的高可用叢集功能叫做因果叢集,因果叢集是基於Raft演算法的一個分散式計算叢集。因果叢集使Neo4j可以在叢集內的不同角色(核心伺服器和讀取副本)之間分離讀/寫資料庫活動,從而實現對巨量吞吐量的支撐、包括讀取自己的寫入(read-your-own-writes)的一致性級別的讀取時間選擇,以及高可用性。Neo4j
3.0中引入的官方驅動程式使用二進位制Bolt協議和叢集來跨群集路由查詢,從而無需外部負載均衡器。

在上述的基礎之上,本次釋出的3.2版本增加了在企業版上支援多資料中心功能,從而使得基於網際網路的應用,以及跨國企業能夠在全球範圍內部署基於圖資料庫的應用系統。

多資料中心擴充套件架構

這個版本中增加的最重要的新功能之一是Neo4j現在已經跨多資料中心部署。此功能是的使用者能夠更方便地跨越大陸資料中心執行Internet規模的應用程式,如下圖所示。

 

早期的版本確實也能做到跨越多個資料中心,也有一些客戶已經這麼做到了,不過在實施時還是有一些限制,不過現在好了,3.2版本已經徹底優化了之前的小缺陷。從這個版本來時,因果叢集上的每個例項都知道它自己在網路的位置以及整體的拓撲結構。同時也實現了區域性性的負載平衡和叢集同步的能力(即子叢集內部),以最大限度地減少廣域網上耗時更新的費用。本地子叢集的層次結構通過最大化本地核心到副本和副本到副本更新資料的機會,加快了從叢集核心到最遠的副本的更新傳遞。

在Neo4j 3.2中,現在可以細分叢集,使得寫入工作負載僅指向指定的資料中心。這通過將核心伺服器分配給群集核心組來實現,並將角色限制在Raft
Follower中。

資料中心叢集組中的分層副本同步

在叢集組本身內,可以將單獨的讀副本伺服器配置為從任何對等體抓取資料,而不是僅僅從核心伺服器(如3.2之前的情況)同步資料。通過使用伺服器組,您可以設定同步的首選項,以便例如大多數副本更傾向於從其本地環境中的伺服器趕上最新資料,並避免使用WAN。

在上面的例子中,兩個本地的Read Replicas從波士頓的本地核心伺服器同步資料。他們隨後又將資料同步給了另外一個叢集的本地讀副本伺服器(左邊框)。

核心伺服器還在芝加哥提供兩個閱讀副本,其中還有6個芝加哥閱讀副本(中間框)。而芝加哥的“根”讀副本伺服器本身又在聖地亞哥再次喂資料給了兩個讀副本,在另一個扇區(右側框)中提供了另外六本本地讀副本伺服器。

有了這個安排,從三個核心伺服器我們可以輕鬆地提供資料同步給超過20個其他資料庫例項。

可操作性和基礎設施即服務改進

為了在各種環境中輕鬆操作Neo4j,我們在Neo4j
3.2中重新引入了RPM軟體包,此外現在在Amazon
Web Services(AWS)和Microsoft
Azure雲中部署Neo4j也可以實現了。

Neo4j現在可以在Azure市場上使用,白皮書可以參閱以下地址:

https://d0.awsstatic.com/whitepapers/Database/neo4j-graph-databases-aws.pdf

 

生產治理特性

在Neo4j 3.2中,我們增加了Kerberos身份驗證選項從而使資料庫變得更加“企業級”,此外,也新增加了一種叫做節點鍵(Node
Key)的模式來實現資料模型強制(Schema Enforcement)。

最後,也擴充套件了Neo4j的管理功能,管理員在這個版本可以更深入地瞭解正在執行的Query查詢的細節了。

新的資料模型約束機制:節點鍵

節點鍵功能允許您確定一組屬性,而這些屬性對於一個指定的標籤來說是強制性和唯一性的。它們的目的是通過拒絕重複來確保圖形的完整性。

這在從多個來源或大型專案匯入或交換數​​據時尤其有用,最佳實踐通常是在資料上部署模式強制、一致性以及質量規則。

與關聯式資料庫中的主鍵不同,對於一個給定標籤可以建立的節點鍵的數量沒有限制。除了為一組屬性強制存在性和唯一性,Node
Keys還支援快速精確查詢的組合索引。

順便說一句,節點鍵功能是Neo4j企業版專有的。

基於Kerberos的安全模組元件

Kerberos是網路認證協議,允許網路節點通過網路證明其身份。它通過使用金鑰分發中心(KDC)來確保客戶端身份正確。Neo4j的Kerberos的安全模組元件提供身份驗證,並應結合其他服務,如Active
Directory或LDAP,授權使用。

 

支援RPM方式安裝

新版本在企業版和社群版上都重新提供了RPM軟體包來改進安裝體驗,同時Microsoft
Azure和Amazon Web Services(AWS)上都已經有了Neo4j的雲套件了。

現在您可以在任何發行版上安裝Neo4j,例如Red
Hat,CentOS,Fedora和Amazon
Linux,命令非常簡單(最好是以root身份執行:

yum install neo4j-enterprise-3.2.0

原生的圖計算高效能

Neo4j很幸運是一個完全的圖資料庫,包括圖計算引擎和圖儲存方式,可以讓我們不斷創新,以不斷提高效能。

在3.2版本中,我們做了一系列的效能改進。以下是具體改進的總結和技術細節:

  • 全新編譯的原生標籤索引替代了較舊的索引方案,以改善插入,更新和刪除速度。

  • 複合精確索引允許在多個節點屬性上的建立索引。

  • Cypher的編譯執行模組新功能可以在基本的Query語句上獲得的令人驚訝的查詢速度。目前這還是Neo4j企業版的一個實驗功能,旨在獲得反饋。

  • 基於成本的查詢優化器完全替代了基於規則的解決方案,因為它確實更快。

  • Cypher DISTINCT功能中的深度查詢已經針對深度遍歷進行了顯著優化,從而提高了執行速度。

標籤索引提高了寫入,更新和刪除的速度

當2013年推出標籤這個功能時,我們建立了一種新的索引來加快標籤查詢速度。雖然這個索引已經達到了改善讀取效能的目的,隨之而來它帶來的問題就是寫入效能的下降。

在Neo4j 3.2中,我們為標籤索引建立了我們首個基本的原生索引方式,取代了以前基於Lucene方式的實現原理。讀取速度仍然很快,但是現在寫入速度要快得多。對於有很多標籤的圖資料,只要你用了這個特性就肯定能注意到差異,我們的測試資料表明效能能提高30%-300%。

 

複合精確索引

這個功能在社群版和企業版中都支援,它可以通過替換用於支援精確匹配的多個單一屬性索引來提高讀寫效能。Neo4j
3.2企業版中引入的新的節點鍵模式約束就利用了複合精確索引與獨特的複合金鑰和屬性存在約束相結合。

 

Cypher編譯執行

Neo4j的每個版本中,Cypher的表現都是一個重要的主題。在Neo4j
3.2中,我們很高興為Cypher引入一個新的編譯執行模組,他的第一個版本中將涵蓋簡單的查詢語句,並且只在Enterprise
Edition版本中提供。

與解釋執行時不同,編譯執行會在每個查詢語句執行前生成二進位制碼,從而可以對查詢語句平均加速300%執行時間。目前編譯執行的這個初始版本還不能涵蓋所有查詢語句。

從句法角度來看,此模組能夠處理您在Cypher培訓的第一個小時內會看到的大部分查詢語句,儘管它們是作為Cypher老手所有可能用到的查詢的一小部分,但仍然是一個重要的集合。我們期望大多數使用者將擁有將受益於新執行時的查詢。

 

Cypher的深度查詢效率

查詢圖形時的常見模式是返回指定深度範圍內的所有連線節點(可選擇按關係型別過濾)。

這樣的查詢語句通常看起來像這樣:

MATCH (a) –
[:KNOWS * 1。。5
] – >(b)

RETURNDISTINCT b

Neo4j 3.2通過使用改進的優化技術顯著加快了這些“可達性”查詢,避免了重新評估已經被計數的節點。這些查詢的效能將與圖形的大小和密度以及查詢的深度成比例地提高。

我們的經驗表明,對於中等尺寸的圖,在深度為3的查詢中通常可以提高300%的查詢速度,而在深度為4和5的情況下,效能可以提高10倍。

 

Neo4j瀏覽器

我們已經重寫了Neo4j瀏覽器,因為它已經開始力不從心了,而且也無法適應架構的變化。值得一提的是,我們已經用與React類似的AngularJS框架替代了原有框架。

在這次前端介面的大修中,你應該會發現新的Neo4j Browser更迅捷和更高的記憶體執行效率。不過如果你發現一些非正常使用問題,請及時反饋給我們。

Neo4j瀏覽器中Cypher編輯器中的語法突出顯示和自動完成

由於前端介面框架的變化,我們可以更快地建立新功能。

例如,我們還改進了Neo4j瀏覽器中的Cypher編輯器,通過引入語法突出顯示和自動完成來提供更具視覺吸引力和更高效的開發體驗。

這使得Cypher程式碼更易於編寫和檢查,而標籤,型別和屬性的自動完成以及節點和關係的自動包圍可以減少擊鍵錯誤。

 

總結

社群版的新功能

  1. 索引:

    1. 複合索引提高查詢速度

    2. 原生的標籤索引提高了30-300%的寫入速度

  2. Cypher查詢語言

    1. DISTINCT的深度查詢功能不再遍歷已經知道的節點大大改善查詢效率

    2. 基於成本的查詢優化器現在已經是自動化呼叫

  3. Neo4j的瀏覽器

    1. 新的前端JavaScript框架帶來的效能改善和靈活性

  4. 驅動程式包1.3版本

    1. 在Bolt驅動庫處理的事務轉移到驅動 

    2. 叢集管理和路由決策移動到驅動

  5. 部署方式

    1. 支援RPM方式部署

    2. 支援通過Azure和AWS EC2方式交付

  

企業版的新功能

  1. 多資料中心支援

    1. 提高全球部署的應用系統的水平擴充套件性和容錯性

    2. 增加了子叢集層級來加速複製過程以降低WAN遍歷

  2. 因果叢集API

  3. Cypher編譯執行模組

    1. 常見的和重複的查詢可以編譯執行,以顯著提高效能

  4. 節點鍵

    1. 將資料庫模式約束引入圖模型,以確保資料存在性或資料驗證

  5. Query監控

    1. 增加了很多新的查詢因子

  6. Kerberos加密

    1. 新增模組提供企業級的安全驗證功能

  7. CAPI Flash叢集

    1. 新增模組支援IBM Power8系統

 

結論

正如你所看到的,Neo4j的新版本不僅速度更快,更具有全球部署能力和企業級特性。即使你不是企業版的使用者,社群成員都看到速度和功能以及便利性的顯著提升。

我們鼓勵Neo4j世界的每個人都能升級到3.2版本,享受速度和擴充套件改進的突破。