写点什么

Philip Rathle 谈 Neo4j 2.3 图数据库新特性和 openCypher 计划

  • 2015-12-10
  • 本文字数:2489 字

    阅读完需:约 8 分钟

近日,图 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

2015-12-10 16:161705
用户头像

发布了 1008 篇内容, 共 391.2 次阅读, 收获喜欢 344 次。

关注

评论

发布
暂无评论
发现更多内容

有人意图取代SQL,你同意吗?

雨果

sql

Serverless的应用场景

阿泽🧸

Serverless 10月月更

【LeetCode】两个链表的第一个重合节点Java题解

Albert

算法 LeetCode 10月月更

大数据ELK(二十六):探索数据(Discovery)

Lansonli

discovery 10月月更

Go-Excelize API源码阅读(二十三)——SetDocProps、GetDocProps

Regan Yue

Go 开源 源码刨析 10月月更

首轮Zepoch节点已售罄完结,你期待次轮吗?

鳄鱼视界

趣学前端」为什么有的页面背景颜色是渐变的

叶一一

CSS 前端 10月月更

「趣学前端」页面上吸顶的效果是怎么做到的

叶一一

CSS 前端 10月月更

华为云从入门到实战 | 负载均衡服务原理

TiAmo

华为 云开发 10月月更

Go-Excelize API源码阅读(二十一)——GetDefinedName()、DeleteDefinedName()

Regan Yue

Go 源码阅读 源码刨析 10月月更

浅谈etcd服务注册与发现

闫同学

Go 微服务 etcd 10月月更

正在消失的机器视觉公司

脑极体

挑战30天学完 Python:Day4数据类型-字符串str

MegaQi

挑战30天学完Python 10月月更

什么是数据产品经理?数据产品经理与传统产品经理有什么区别?

雨果

数据产品经理

「趣学前端」日常浏览的页面为什么可以五颜六色

叶一一

CSS 前端 10月月更

如何在高性能的前提下,降低数据库存储成本?

OceanBase 数据库

Java基础(六)| Debug模式及基础练习

timerring

Java debug 10月月更

Python进阶(二十二)Python3使用PyMysql连接mysql数据库

No Silver Bullet

Python3 MySQL数据库 pymysql 10月月更

Java三大特性(一)—封装

共饮一杯无

Java 面向对象 10月月更

面试官:说说你对Node中的Stream的理解

CoderBin

面试 前端 Node 10月月更

【一Go到底】第十五天---continue快速入门

指剑

Go golang 10月月更

一个实际的例子学习 SAP BTP Java 应用的 @Before 注解使用方式

汪子熙

Java 云原生 Cloud SAP 10月月更

【从0到1学算法】5.Bubble Sort算法-下

Geek_65222d

10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析03

桑榆

源码刨析 10月月更 C++

「趣学前端」容器上的折角边框是图形吗?

叶一一

CSS 前端 10月月更

「趣学前端」box-shadow的多重用法

叶一一

CSS 前端 10月月更

测试需求平台5-Blueprint优化与首个vue页搭建

MegaQi

测试平台开发教程 10月月更

Python进阶(二十三)Django使用pymysql连接MySQL数据库做增删改查

No Silver Bullet

Python django MySQL数据库 pymysql 10月月更

B类纯资金业务的资金安全保障

agnostic

资金安全 B类业务 纯资金业务

Go-Excelize API源码阅读(二十二)——SetAppProps(appProperties *AppProperties)

Regan Yue

Go 开源 源码分析 Excelize 10月月更

前端开发提效小技巧之业务功能篇

叶一一

前端 提高效率 10月月更

Philip Rathle谈Neo4j 2.3图数据库新特性和openCypher计划_语言 & 开发_Srini Penchikala_InfoQ精选文章