我使用Gremlin与python和我已经创建了一个函数来添加一个新的顶点避免创建重复:
def add_vertex(label, properties):
first_attribute = list(properties.keys())[0]
check_vertex = g.V().has(first_attribute, properties[first_attribute]).toList()
if check_vertex:
return check_vertex[0]
v = g.addV(label)
for attribute in properties:
v.property(attribute, properties[attribute])
return v.next()
'label'是顶点的名称,'properties'是包含顶点属性的字典。
为了提高添加新顶点的性能,我还添加了一个基于属性的第一个属性的索引。
对于包含284.000个元素的字典,计时为:
- 12分钟不检查顶点(仅插入顶点)
- 全功能25分钟
有没有可能Gremlin这么慢?难道不能提高性能吗?我觉得那个时间点太过了,不是吗?
是否还有另一种方法来添加顶点没有重复?
谢谢。
看起来您正在尝试插入284K顶点,检查是否已经存在。你可以做一些事情来加快这些操作。
首先,您可以检查是否存在,并在需要时在Gremlin查询中使用coalesce
步骤沿
g.V().has(first_attribute, properties[first_attribute]).
fold().
coalesce(unfold(),<add whatever needs adding>)
要进一步提高Python客户端的吞吐量,您还可以做两件事
- 通过批处理方式发送多个请求,例如在上面所示的20到50个步骤之间一起发送。
- 将工作分配给多个Python线程或进程。
你连接到的海王星实例将有两倍于实例上有vcpu的工作线程处理查询。使用这些技术将显著提高吞吐量,还将显著减少您向Neptune发出的往返呼叫的数量。