写点什么

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:161977
用户头像

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

关注

评论

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

浏览器缓存之强缓存和协商缓存

Augus

浏览器 9月日更

坚决抵制造星炒星等畸形价值观,资本是如何通过造星收割粉丝的

石头IT视角

深入理解JAVA虚拟机原理之垃圾回收器机制(一),Java开发6年了

Java 程序员 后端

谷歌工程师是怎么写工程设计文档的?

俞凡

Google 大厂实践

Kubernetes环境Traefik部署与应用

Galen Suen

Kubernetes Helm Traefik

深入了解QueryDSL

邱学喆

type Configuration Expression SqlSerializer visitor

区块链不是用来解决现实社会问题 而是为了建立一个全新的平行世界而生

CECBC

Typora+PicGo+Gitee搭建博客写作环境

Simon郎

Typora PicGo markdown编辑器 免费图床

深入理解Java中的不可变对象,这可能是目前最全的

Java 程序员 后端

性能测试中集合点和多阶段问题初探

FunTester

性能测试 接口测试 测试框架 测试开发 FunTester

Mybatis Plus 的 @SqlParser 的说明与替代注解

玄兴梦影

注解 过滤器 Mybatis-Plus

攀岩时代:HMS Core 6.0与移动开发之路

脑极体

【VueRouter 源码学习】第十篇 - 全局钩子函数的实现

Brave

源码 vue-router 9月日更

深入理解Java虚拟机-虚拟机执行子系统,字节跳动超高难度三面java程序员面经

Java 程序员 后端

Python——内置模块中的内置函数

在即

9月日更

看好创业项目,避免藏在乐观下的无知状态

boshi

创业

架构实战营 模块八作业

孫影

架构实战营 #架构实战营

网络攻防学习笔记 Day134

穿过生命散发芬芳

网络安全 9月日更

外包学生管理系统架构文档

穿裤子的云

架构实战营

Scrum Patterns:冲刺目标(译)

Bruce Talk

敏捷 译文 Agile Scrum Patterns

老师偷偷塞给我一份资料,封面写着《操作系统》,下面一行小字

梦想橡皮擦

9月日更

外包学生管理系统架构设计

陈家豪

架构实战营

字符串池化,减少了三分之一的内存占用

newbe36524

C# string 内存

架构实战营 - 模块八作业

李东旭

「架构实战营」

【架构图话说】我们怎么就做上了“中台”

超哥图话说

架构 中台 复杂 增长

模块三作业

Geek_fc100d

「架构实战营」

计算机操作系统学习笔记 | 操作系统特征

Regan Yue

学习 操作系统 9月日更

区块链,不是元宇宙的全部

CECBC

架构实战营 - 模块三作业

en

架构实战营

☕【Java技术指南】「并发编程专题」CompletionService框架基本使用和原理探究(基础篇)

码界西柚

Java CompletionService Executor 9月日更

不同 GC 和 堆内存总结

大海

JVM 垃圾回收机制 垃圾回收算法 垃圾回收器

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