沙发底座 amp JDBC 集成 适用于neo4j 3x

Editor’s Note:
This presentation was given by Lorenzo Speranzoni at GraphConnect Europe in April 2016。

洛伦佐·斯珀兰佐尼于2016年4月在GraphConnect欧洲公司做了这次演讲。洛伦佐 斯珀兰佐尼于2016年4月在GraphConnect欧洲公司做了这次演讲。

我们今天要讨论的是用Couchbase开发的连接器LARUS业务自动化,一种NoSQL数据库,以及我们用Neo4j 3实现的新JDBC驱动程序。 0 LARUS自2015年以来一直是Neo4j的合作伙伴。

我们的总部设在意大利威尼斯,提供咨询和培训。 该公司成立于2011年,当时Neo4j还只是第一版。

当时,我们在一家零售公司工作,目标是在一个图形数据库中排列所有的文章和文章簇。

正是在那时,我们遇到了吉姆 韦伯,并开始了解Neo4j .

沙发底座 amp JDBC 集成 适用于neo4j 3x

2015年,我们决定成为Neo4j解决方案合作伙伴,去年我们也开始了获得Neo4j认证的过程。 我们与意大利各地的多家公司合作:我们为一家公司提供服务,该公司为巴克莱运营了一个有趣的概念验证,以提供欺诈检测。

Cerved是Neo4j的早期采用者之一,它使用图形数据库来存储整个商业网络,这样就可以通过浏览公司的图形轻松找到公司的所有者。

有一个 其中之一是由威廉 里昂为蒙古数据库出版的,它提供了这种转换的指令。

沙发底座 amp JDBC 集成 适用于neo4j 3x

让我们回顾一下使用Spotify的案例研究,它有一个有趣的应用编程接口。

沙发底座 amp JDBC 集成 适用于neo4j 3x

以下是一个典型的JSON专辑:每张专辑都有曲目;在这张专辑中,有11张。

下面是这些轨道的阵列,每个轨道都包括各个轨道的所有相关信息: 我们如何将这些数据转换成图表?

沙发底座 amp JDBC 集成 适用于neo4j 3x

一般来说,基本策略是这样的:您可以在节点内复制像字符串或数字这样的原始文章。 我们创建一个相册节点,所有图元和图元属性数组都成为节点内的属性:有了嵌套对象,事情变得有点复杂,比如艺术家。

一般的想法是嵌套对象成为连接的节点。

沙发底座 amp JDBC 集成 适用于neo4j 3x

我们创建与专辑的关系,并使用上述策略复制所有艺术家信息:我们还可以有一个对象数组作为属性,这些属性以连接节点列表的形式成为项目。

沙发底座 amp JDBC 集成 适用于neo4j 3x

JSON变成了一张有艺术家的专辑,这张专辑有几首歌: Couchbase连接器架构基于四个主要组件即使信息是在文档数据库中汇总的,我们也需要能够将某些内容识别为相册。Couchbase监听器(1)监听在Couchbase内部更改或创建的文档。然后,这个监听器通过我们的Neo4j服务器扩展在图中传输变异的文档,这是一个JSON加载器(2),可以实际加载来自任何来源的JSON . (我们将这两个项目分开,现在您可以在我们自己的GitHub存储库中找到它们。

(我们有另一个服务器扩展,Neo4j突变监听器(3),它寻找节点和关系的变化,并在Neo4j中重建它们。 Neo4j JSON加载器(4)通过Couchbase软件开发工具包(软件开发工具包)工具将JSON传输到Neo4j . 首先,我们有一个包装消息的事件,然后我们过滤这种事件,以便我们只接收突变消息。

沙发底座 amp JDBC 集成 适用于neo4j 3x

这些都是来自我之前提到的软件开发工具包的类。

沙发底座 amp JDBC 集成 适用于neo4j 3x

然后我们实现了一个只接受突变事件的事件处理程序,然后通过我们的远程Neo4j转换器JSON加载器发送它:然后,我们必须通过实现一个中断器来注册侦听器。
0 .
我们使用特定的方法训练翻译器,添加域描述符并对其进行设置以指示JSON加载器:

沙发底座 amp JDBC 集成 适用于neo4j 3x

有一个REST API发布了一个连接器,并接受了我们刚刚提供的JSON:

沙发底座 amp JDBC 集成 适用于neo4j 3x

我们有一个转换器将JSON文档转换为Cypher语句,然后在事务内执行该语句:

沙发底座 amp JDBC 集成 适用于neo4j 3x

我们通过子查询重建JSON文档,然后通过Couchbase JSON加载器将变异的文档发送回:

沙发底座 amp JDBC 集成 适用于neo4j 3x

这些是Couchbase类,我们将其附加到特定存储桶中的集群,然后运行一个新贵,用于传输和更新JSON文档:

沙发底座 amp JDBC 集成 适用于neo4j 3x

我们有一个转换器将JSON文档转换为Cypher语句,然后在事务内执行该语句:
我们如何指导域-JSON加载器-如何配置业务域,然后在Neo4j中进行匹配?

我们有一个转换器将JSON文档转换为Cypher语句,然后在事务内执行该语句:
现在,每个专辑和单个曲目都有一个通用ID来标识它。
然后,我们可以使用此ID查找数据库中存在的节点并分配标签名称:

沙发底座 amp JDBC 集成 适用于neo4j 3x

这些是Couchbase类,我们将其附加到特定存储桶中的集群,然后运行一个新贵,用于传输和更新JSON文档:
相册域对象现在由ID属性唯一标识。
借助这些信息,我们说:“好吧,这是相册,类型和在您将新文档存储在其中时Couchbase分配的唯一**的唯一方法。

专辑ID是简单的部分,因为我们已经告诉JSON加载器ID是唯一键,然后我们拥有针对该节点更新的信息集。

以下是U2专辑的结果图
约书亚树
:

沙发底座 amp JDBC 集成 适用于neo4j 3x

如果每次加载JSON时都必须创建不同的节点,则不能在此基础上利用关系来构建推荐引擎:

然后,我们可以使用此编号查找数据库中存在的节点并分配标签名称:
0。
当然,作为一家Java公司,我们拥有这方面的专业知识,因此自然可以开始使用标准JDBC接口。

以下是开发JDBC驱动程序的团队:

沙发底座 amp JDBC 集成 适用于neo4j 3x

这些是Couchbase类,我们将其附加到特定存储桶中的集群,然后运行一个新贵,用于传输和更新JSON文档:
我们有来自德国的朋友Ralph(他帮助测试)和来自Neo4j的Benoit(致力于ACTP协议)。
没有他们,我们将无法打造出成功的产品。

0.

最后,该产品经过了严格的测试,并专注于性能。

Bolt实现只是一个包装器:

沙发底座 amp JDBC 集成 适用于neo4j 3x

约书亚树
这些将实现回溯兼容性,以便它们可以跨版本使用:

沙发底座 amp JDBC 集成 适用于neo4j 3x

我们的旧驱动程序存在许多性能问题,导入这些CSV行可能需要30分钟,而新驱动程序则需要将近17分钟:

沙发底座 amp JDBC 集成 适用于neo4j 3x

如果每次加载JSON时都必须创建不同的节点,则不能在此基础上利用关系来构建推荐引擎:
我们已经使用以下所有工具(全部使用JDBC)对其进行了测试:

沙发底座 amp JDBC 集成 适用于neo4j 3x

然后,我们创建一条语句,执行查询,匹配用户的姓名和名称,然后在结果集上循环。
在这种情况下,我们只打印所有用户节点的名称。
之后,我们关闭连接:

沙发底座 amp JDBC 集成 适用于neo4j 3x

以下是我们的发布时间表:

沙发底座 amp JDBC 集成 适用于neo4j 3x

以下是开发JDBC驱动程序的团队:
在里程碑4中,我们将介绍HTTP协议和Callable Statement,以便我们可以利用Neo4j的新存储过程。
然后,我们将为Milestone 5进行完全复古兼容的实现,并在2016年秋季初或多或少地推出一个可用于生产的软件版本,该版本可能会移至Neo4j贡献者存储库中: