nik*_*lai 5 python gremlin tinkerpop tinkerpop3 janusgraph
刚开始使用 Tinkerpop 和 Janusgraph,我正试图根据文档弄清楚这一点。
但首先我需要一种将数据导入 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他们属于哪个?
为这些可能直截了当的问题道歉,但我对此很陌生。
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)
加载数据的一种有效方法是将其拆分为两个文件:
source_id
并target_id
和所有的链接属性这可能需要一些数据准备步骤。
这是一个示例脚本
加快进程的技巧是在节点创建期间保持您的 id 和 JanusGraph 创建的 id 之间的映射。
即使不是强制性的,我也强烈建议您在加载任何数据之前为您的图表创建一个显式架构。这是一个示例脚本
好吧,事实是将真实用户数据批量加载到 JanusGraph 是一种真正的痛苦。我一直在使用 JanuGraph,因为它是大约 2 年前的第一个版本,并且批量加载数据仍然很痛苦。很多不一定归结于 JanusGraph,因为不同的用户有非常不同的数据、不同的格式、不同的图模型(即一些大多需要一个顶点和一个边(例如 child-mother),其他人处理一个顶点有很多边(前用户关注者)),最后但同样重要的是,该工具的本质是处理大型数据集,更不用说底层存储和索引数据库大多预先配置为大规模复制(即您可能认为 2000 万行,但实际上最终插入 60m 或 80m 条目)
总而言之,我在体面的时间范围内批量加载了数千万的成功(同样会很痛苦,但这里是一般步骤)。
我想我已经涵盖了要点,同样,这里没有灵丹妙药,这个过程通常涉及相当多的反复试验,例如批量插入率,太低是不好的,例如每秒 10 次,而太高同样不好,例如 10k每秒,它几乎总是取决于你的数据,所以它是一个个案的基础,不能推荐你应该从哪里开始。
总而言之,放手一搏,在我看来,批量加载是最难的部分,它为您的应用程序提供了新的维度,这些努力非常值得。
祝一切顺利!