【发布时间】:2016-08-16 15:37:06
【问题描述】:
我目前正在研究 ArangoDB POC。我发现使用 PyArango 在 ArangoDB 中创建文档所花费的时间非常长。插入 300 个文档大约需要 5 分钟。我已经粘贴了下面的粗略代码,如果有更好的方法可以加快速度,请告诉我:
with open('abc.csv') as fp:
for line in fp:
dataList = line.split(",")
aaa = dbObj['aaa'].createDocument()
bbb = dbObj['bbb'].createDocument()
ccc = dbObj['ccc'].createEdge()
bbb['bbb'] = dataList[1]
aaa['aaa'] = dataList[0]
aaa._key = dataList[0]
aaa.save()
bbb.save()
ccc.links(aaa,bbb)
ccc['related_to'] = "gfdgf"
ccc['weight'] = 0
ccc.save()
不同的集合由以下代码创建:
dbObj.createCollection(className='aaa', waitForSync=False)
【问题讨论】:
-
你考虑过arangoimp吗?如有必要,您可以使用 Python 对源数据进行预处理,但导入本身应由 arangoimp 完成,它使用 ArangoDB 的批量导入 API 来提高效率。
-
我查看了 arangoimp,看起来数据应该是 JSON 格式,CSV 文件已经存在主键。我在这里看到的问题是我将无法处理重复的节点,这些节点可能已经存在于数据库中。是否有任何特定的选项来处理这些条件,我在 ArangoImp 文档中找不到任何选项
-
pyArango 当前遇到了 HTTP
keep-alive的问题 - 它不会重用连接,因此最终会重新进行 DNS 查找。我们目前正在调查这可能是什么原因以及如何解决它。 -
@dothebart:感谢您提供的信息。我最近尝试使用 ArangoDB 的 java 驱动程序,启用批处理模式后,它以大约 1000 个文档/秒的速率传输数据,但是边缘集合没有在其中更新。删除批处理模式后,相同的代码更新了 Edge 集合。如果您对此有任何想法,请告诉我。
-
@pjesudhas:arangoimp 支持 JSON、CSV 和 TSV。不需要存在文档密钥。如果您忽略它,ArangoDB 将为您生成一个密钥。当然,您确实需要边缘的
_from和_to属性来告诉它要链接哪些文档。这是使用文档 ID(_id,集合名称 + “/” + 文档键)完成的。您要链接的文档实际上不必存在,只有集合必须存在。有关如何处理重复文档,请参见此处:docs.arangodb.com/3.0/Manual/Administration/…