2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

iVX:图形化编程语言 + IDE,而非传统 “代码平台”

代码制造者

无代码平台

YashanDB知识库|Quartz调度写布尔值报错?问题关键在于 true/false 与 0/1 的差异

数据库砖家

数据库·

YashanDB CONCAT函数

YashanDB

yashandb

智源数据新基建系列Workshop | 从大模型到具身智能

智源研究院

YashanDB知识库|集成 Druid 连接池时日志报 “token IDENTIFIER start”?问题虽小但有来头!

数据库砖家

数据库·

飞算 JavaAI 实战:从零搭建电商系统,代码一键生成!

飞算JavaAI开发助手

AI在线生成组织架构图!办公效率原地起飞!

职场工具箱

AI 办公软件 AIGC 绘图软件 组织架构图

YashanDB COS函数

YashanDB

yashandb

YashanDB COT函数

YashanDB

yashandb

Python语言中进程、线程、协程执行效率分析

电子尖叫食人鱼

Python

YashanDB知识库|一个 SQL 多个执行计划?绑定参数背后的优化器逻辑别忽略

数据库砖家

数据库·

YashanDB知识库|服务端编码是 GBK,为什么升级失败了?这其实是个字符集对齐问题

数据库砖家

数据库·

AI如果不能完全取代手工测试,那它产生意义是什么?

测试人

人工智能

交易所开发:构建高效数字交易枢纽

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

分库分表带来的这7大问题,一定要小心!

不在线第一只蜗牛

数据库

别再堆文档了,大模型时代知识库应该这样建

量贩潮汐·WholesaleTide

AI 大模型

YashanDB知识库|JDBC 和 OCI 驱动需要设置字符集吗?其实你可能多虑了!

数据库砖家

数据库·

站在“场景化保险”拐点的致保科技,按下了增长“加速键”

Alter

TiDB 社区第四届专栏征文大赛联合墨天轮火热开启,TiDB 业务场景实战、运维开发攻略两大赛道,BOSE 降噪耳机、大疆手持云台、投影仪、运动手环、礼品卡等重磅礼品等你来拿!

TiDB 社区干货传送门

数据库 运维 分布式数据库 征文大赛 TiDB

YashanDB CONCAT_WS函数

YashanDB

yashandb

Neo4j 可观测性最佳实践

观测云

neo4j

别让工具拖后腿!2025年Top5 AI代码工具,让Java开发效率翻倍

飞算JavaAI开发助手

【参会有礼】4.26 广州 | 国产开源 AI 数据库技术交流

Apache IoTDB

YashanDB知识库|BeetISQL 批量插入时报 autoAssignKey 异常?可能是 rowid 惹的祸

数据库砖家

数据库·

DAPP(去中心化应用程序)开发全解析:构建去中心化应用的流程

区块链软件开发推广运营

交易所开发 dapp开发 公链开发 代币开发 dapp开发链游开发

让 LLM 来评判 | 基础概念

量贩潮汐·WholesaleTide

LLM

从代码小白到 Java 高手:AI 工具如何压缩你的学习曲线?

飞算JavaAI开发助手

MQTTX + MCP:MQTT 客户端秒变物联网 Agent

EMQ映云科技

飞算 JavaAI 与 Spring Boot:如何实现微服务开发效率翻倍?

飞算JavaAI开发助手

程序员「达尔文时刻」:飞算JavaAI如何帮你从「码农」转型「AI架构师」?

飞算JavaAI开发助手

分析型数据库与事务型数据库?核心差异与选型指南

镜舟科技

OLAP 分析型数据库 OLTP 事务型数据库 数据存储结构

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