Philip Rathle談Neo4j 2.3圖數據庫新特性和openCypher計劃
近日,圖NoSQL數據庫 Neo4j 母公司Neo Technology發布了該數據庫的2.3版本。同時,他們還宣布了openCypher計劃,幫助創建一種標準的圖查詢語言。
為了獲得更好的性能,2.3版本支持內存內頁面緩存組件。另外,它還支持Docker工具,并增強了查詢計劃器。 Philip Rathle 是Neo Technology的產品副總裁,他在一篇 文章 中介紹了Neo4j最新版本的新特性。
openCypher旨在使Neo4j成為一個 更簡單的圖數據管理平臺,以加速圖處理和分析的應用。它主要包含如下四個部分:
- 語言規范
- 參考實現
- 技術兼容工具包
- Cypher參考文檔
InfoQ就Neo4j最新版本的新特性和openCypher公告采訪了Philip。
InfoQ:您能介紹下新的內存內頁面緩存組件這個純堆外緩存嗎?它的工作原理是什么?為什么要構建一個原生緩存,而不是使用一種已有的緩存框架?
Rathle:將磁盤內容緩存移至堆外,可以讓我們在管理整個數據庫的內存時獲得更多的控制。Neo4j以Java為基礎構建。對于傳統應用程序而言,它提供了出色的內存管理和性能,不過,當連續不斷的查詢操作導致大量數據循環經過數據庫緩存時,它就無法滿足要求了。
Neo4j的堆內緩存功能已經提供了極高的性能。這一直很有效……直到非常大的緩存與非常大的查詢讓Java的分代垃圾收集器備受壓力,導致 JVM堆成為一個限制擴展的因素。按照設計,新的堆外緩存同堆內緩存一樣快(實際上更快),遠遠超出緩存在受JVM堆限制時可能達到的圖查詢性能水平。同時,新緩存管理非常簡單,調優選項更少,調優更靈活。
InfoQ:內存內頁面緩存的并發訪問是如何管理的?
Rathle:并發管理有多種機制。一是提供粒度夠細但又互不影響的低級數據結構,同時粒度又要夠大,可以提供一個有效的“緩存親和度(cache affinity)”水平。二是快速鎖定同智能鎖定相結合,確保訪問緩存的線程在大多數情況下都可以自由運行。再就是,我們還在Neo4j 2.3中新增了檢查點,提供恰當的選項和默認值,用于不斷地清除緩存。通過將負載在時間上分散開,在日志切換期間,查詢仍然能夠順暢地操作。
InfoQ:增強后的Cypher查詢計劃器是如何工作的?有什么特別的應用場景比其他應用場景更有效嗎?
Rathle:在Neo4j 2.3中,Cypher查詢計劃器在決定一個查詢使用哪個執行計劃之前會考察更多的計劃。以前,為了避免內存過度使用,它會主動裁剪計劃——這對于大查詢非常合適。但計劃器經常會陷入局部最優,導致次優查詢計劃。更新后的Cypher查詢計劃器采用了一種更好的算法,使它可以考察更多的計劃,同時還能保持一個低水平的內存需求。
Neo4j 2.3還提供了可以用于求解查詢的新操作符——例如,在適用的情況下,新增的TriadicSelection操作符可以讓查詢比以前快許多倍。
InfoQ:對于新版本的字符串強化圖搜索功能,您能舉幾個例子嗎?這個新功能是基于什么構建的?
Rathle:Neo4j 2.3向Cypher添加了新操作符——“STARTS WITH”、“ENDS WITH”和“CONTAINS”。這些操作符可以簡化使用Cypher在圖中搜索字符串屬性的操作。此外,STARTS WITH操作符可以使用普通索引快速找到匹配的節點。
同STARTS WITH類似,在Neo4j 2.3中,Cypher計劃器還能識別數值范圍查詢,并 且,會在基于數值屬性在圖中搜索節點時使用普通索引。所有這一切的關鍵是一個足夠智能的優化器,它能夠將圖模式匹配與基于文本的索引結合起來,優化圖-文混合搜索。
InfoQ:關于Docker支持,你們為開發人員提供了什么工具,讓他們可以開始在Docker容器中使用Neo4j?
Rathle:我們已經構建了一個Neo4j Docker鏡像。該鏡像是官方Docker鏡像庫的一部分,在使用標準Docker工具運行Neo4j容器時可以使用。要了解更多關于Neo4j on Docker和可用工具的信息,可以查看通用文檔,地址為 https://hub.docker.com/r/neo4j/neo4j/ 。
InfoQ:Docker支持現在可以用于生產環境了嗎?在將Neo4j與Docker一起使用時,有什么部署注意事項?
Rathle:是的。目前,Neo有一個官方Docker庫,我們會為客戶提供官方支持。至于最佳實踐:內存可能是最重要的調優參數。底層硬件必須為運行在它上面的容器提供足夠的內存;Neo4j鏡像允許按需配置內存。而 Neo4j企業版 ——與社區版的差別主要是商業性——有許多社區版所沒有的操作特性,包括集群。
本質上講,Docker容器沒有永久性,但Neo4j需要持久存儲來存儲數據。為此,底層硬件必須包含一塊可以掛載到容器的磁盤。在默認情況下,Docker是彼此隔離的。在運行一個Neo4j集群時,必須仔細配置容器,確保它們彼此之間可以互相通信。
InfoQ:OpenCypher獲得了來自Databricks和Oracle的支持。您能否詳細介紹下,Spark GraphX圖數據處理庫如何從openCypher計劃獲益?
Rathle:該計劃最終會實現Cypher在Spark上運行……或者至少成為Spark的圖功能組件。現在,在Spark上做圖查詢,主要的選項是 Scala,這不錯:Scala非常強大。(實際上,Cypher就是用Scala實現的。)但是,Cypher為許多習慣使用SQL的數據分析師提供了使用GraphX圖分析功能的機會,我們為此感到興奮,因為Spark是Neo4j很自然的補充。Spark主要是一個數據科學家獲取洞識的工具集,Neo4j主要是一個在應用程序中實現實時圖分析的平臺。洞識和行動:很好的互補。
那是我們的愿景和動機。我們同Databricks建立了良好的友誼,Databricks聯合創始人兼CEO Ion Stoica表示將為openCypher提供公共支持服務,對此我們非常高興。用他的話說:“圖處理正成為現代大數據技術棧中不可或缺的部分。 Neo4j Cypher查詢語言將極大的加速圖數據庫的應用。我們希望將Cypher的圖模式匹配能力帶到Spark技術棧,使人們可以更方便地進行圖查詢。”
關于受訪者
Philip Rathle 是Neo Technology的產品副總裁。他熱衷于構建優秀的產品,幫助用戶應對明天的挑戰。在職業生涯的頭十年,他為世界上其中一些最大的公司構建信息解決方案:首先是在埃森哲,然后是在Tanning Technology,后者是當時世界上頂尖的數據庫咨詢服務公司之一,他作為解決方案架構師,主要關注數據倉庫和BI戰略。
查看英文原文: Philip Rathle on Neo4j 2.3 Graph Database Features and openCypher Initiative