创建高效的多线程 Gremlin 写入 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建高效的多线程 Gremlin 写入

使用 Gremlin 将数据通过多线程加载到 Neptune 时,有一些指导方针可供遵循。

如果有可能,向每个线程提供一组可以插入或修改而不造成冲突的顶点或边缘。例如,线程 1 地址 ID 范围是 1–50000,线程 2 地址 ID 范围是 50001–100000,以此类推。这会减少造成 ConcurrentModificationException 的可能性。为安全起见,围绕所有写入放置一个 try/catch 块。如果出现任何失败,您可在短暂延迟后重试它们。

以介于 50 到 100(顶点或边缘)之间的批大小进行的批量写入通常可以很好地工作。如果您要为每个顶点添加大量属性,其数量接近 50,那么 100 是比较好的选择。进行一些试验是值得的。因此,对于批量写入,您可以使用类似于下文的方法:

g.addV(‘test’).property(id,’1’).as(‘a’). addV(‘test’).property(id,’2’). addE(‘friend’).to(‘a’).

然后,在每个批量操作中重复此方法。

相比在 Gremlin 与服务器的每次往返通信中添加一个顶点或边缘,使用批处理可大幅提升效率。

如果您使用 Gremlin 语言变体 (GLV) 客户端,则可以先创建遍历以便用编程方式创建批处理。然后在其中进行添加,最后对其进行迭代,例如:

t.addV(‘test’).property(id,’1’).as(‘a’) t.addV(‘test’).property(id,’2’) t.addE(‘friend’).to(‘a’) t.iterate()

如果可能,最好是使用 Gremlin 语言变体客户端。不过您可以使用其他客户端执行类似的操作,通过将字符串连接起来构建一个批次,以文本字符串的格式提交查询。

如果您使用的是 Gremlin 客户端库之一而不是基本 HTTP 进行查询,线程应该全部共享同一个客户端、集群或连接池。您可能需要调整设置来实现尽可能最佳的吞吐量,诸如 Gremlin 客户端使用的连接池大小和工作线程数等设置。