使用特定模型通过 Tinkerpop 将(数百万行)数据导入 Janusgraph 的最佳方法

nik*_*lai 5 python gremlin tinkerpop tinkerpop3 janusgraph

刚开始使用 Tinkerpop 和 Janusgraph,我正试图根据文档弄清楚这一点。

  • 我有三个数据集,每个数据集包含大约 2000 万行(csv 文件)
  • 有一个特定的模型,其中变量和行需要连接,例如什么是顶点,什么是标签,什么是边等。
  • 在图表中包含所有内容后,我当然想使用一些基本的 Gremlin 来查看模型的工作情况。

但首先我需要一种将数据导入 Janusgraph 的方法。

可能存在用于此的脚本。但除此之外,它是否可能用python编写,打开一个csv文件,获取变量X的每一行,并将其添加为顶点/边/等。……?还是我完全误解了 Janusgraph/Tinkerpop?

提前感谢您的任何帮助。

编辑:

假设我有几个文件,每个文件包含几百万行,代表人,还有几个变量,代表不同的指标。第一个示例可能如下所示:

             metric_1    metric_2    metric_3    ..

person_1        a           e           i
person_2        b           f           j
person_3        c           g           k
person_4        d           h           l
..        
Run Code Online (Sandbox Code Playgroud)

我是否应该将其转换为具有首先仅由值 [a,..., l] 组成的节点的文件。(以及后来可能更精细的属性集)

然后 [a,..., l] 被索引了吗?

在“现代”图形这里似乎有一个索引(号码1,...,12对所有的节点和边,独立于它们的重叠标签/类别的),例如应在每次测量单独索引,然后连接至一个给定的person_x他们属于哪个?

为这些可能直截了当的问题道歉,但我对此很陌生。

Ben*_*gal 6

JanusGraph 使用可插拔存储后端和索引。出于测试目的,bin/janusgraph.sh发行版打包了一个名为的脚本。它允许通过启动 Cassandra 和 Elasticsearch 来快速启动和运行(它还启动了一个 gremlin-server 但我们不会使用它)

cd /path/to/janus
bin/janusgraph.sh start
Run Code Online (Sandbox Code Playgroud)

然后我建议使用 Groovy 脚本加载您的数据。Groovy 脚本可以使用 Gremlin 控制台执行

bin/gremlin.sh -e scripts/load_data.script 
Run Code Online (Sandbox Code Playgroud)

加载数据的一种有效方法是将其拆分为两个文件:

  • nodes.csv:每个节点一行,包含所有属性
  • links.csv:每一个环节符合source_idtarget_id和所有的链接属性

这可能需要一些数据准备步骤。

这是一个示例脚本

加快进程的技巧是在节点创建期间保持您的 id 和 JanusGraph 创建的 id 之间的映射。

即使不是强制性的,我也强烈建议您在加载任何数据之前为您的图表创建一个显式架构。这是一个示例脚本


Don*_*ndi 6

好吧,事实是将真实用户数据批量加载到 JanusGraph 是一种真正的痛苦。我一直在使用 JanuGraph,因为它是大约 2 年前的第一个版本,并且批量加载数据仍然很痛苦。很多不一定归结于 JanusGraph,因为不同的用户有非常不同的数据、不同的格式、不同的图模型(即一些大多需要一个顶点和一个边(例如 child-mother),其他人处理一个顶点有很多边(前用户关注者)),最后但同样重要的是,该工具的本质是处理大型数据集,更不用说底层存储和索引数据库大多预先配置为大规模复制(即您可能认为 2000 万行,但实际上最终插入 60m 或 80m 条目)

总而言之,我在体面的时间范围内批量加载了数千万的成功(同样会很痛苦,但这里是一般步骤)。

  • 创建图形元素时提供 ID。如果从例如 MySQL 导入,可以考虑将表名与 id 值组合以创建唯一 ID,例如 users1、tweet2
  • 不要预先指定架构。这是因为 JanusGraph 需要确保数据在每次插入时都符合
  • 不要预先指定索引。只是与上面有关,但确实值得自己进入。稍后批量插入第一个索引
  • 请,请,请注意批量插入的底层数据库功能并激活它们,即阅读 Cassandra、ScyllaDB、Big Table,尤其是关于复制和索引的文档
  • 综上所述,配置 JanusGraph 以进行批量加载,确保您的数据完整性正确(即没有重复的 ID)并考虑某种形式的并行插入请求,例如某种 map reduce 系统

我想我已经涵盖了要点,同样,这里没有灵丹妙药,这个过程通常涉及相当多的反复试验,例如批量插入率,太低是不好的,例如每秒 10 次,而太高同样不好,例如 10k每秒,它几乎总是取决于你的数据,所以它是一个个案的基础,不能推荐你应该从哪里开始。

总而言之,放手一搏,在我看来,批量加载是最难的部分,它为您的应用程序提供了新的维度,这些努力非常值得。

祝一切顺利!