我是neo4j的新手,目前正在尝试将现有数据迁移到neo4j数据库中。我编写了一个小程序,将当前数据(以定制格式)转换为数据库初始填充的大型CREATE cypher查询。我的第一次迭代是保留现有对象模型的结构,即对象成为节点,节点类型与当前对象模型中的对象名称相同,成员成为属性(成员名称为属性名称)。这是针对所有基本类型(和字符串)完成的,因此任何成员对象都以与原始对象模型相同的方式进行分解。
这在性能方面表现良好,已经生成了13000多行CREATE cypher查询,可以通过Web前端/客户端执行。然而,这个模型并不适合图形数据库,我相信,因为可以有许多属性,而我想将这些“基本”节点(具有基本类型的成员)分解为它们自己的节点,与更多相关'abstract'节点,表示更高级别的对象/类。这意味着每个成员都是一个具有单个(首先,它可能会增长)属性的节点,如{value:“42”},或者我可以将节点类型设置为数据类型(即整数)。如果我的理解是正确的,这也将允许我在'成员'之间创建关系(因为它们是节点而不是propeties),在表达不同对象的原始成员之间的关系时允许更大的自由,而不是仅仅将父对象相互关联。
现在的问题是,这会产生144000多行Cypher查询(并且这不是与其他人相比的大型数据集),neo4j客户端似乎可以批量处理。代码突出显示似乎在客户端的查询输入框中工作(即它正确突出显示,我假设它意味着它正确解析它并且是有效的密码查询),但是当我来运行查询时,我得到了通常的浏览器而不是响应,然后堆栈溢出(没有任何打算)错误。更多的是neo4j客户端没有优雅地退出并且总是要求我强制执行结束任务并且数据库处于2.5-3GB的使用范围内,有效和少量的数据是什么(144000行,大约2/3是关系所以最多~48000个节点)。然而我读过我应该能够在几毫秒内处理数百万个节点和关系?
用firefox和chrome试过了。我在windows10上使用neo4j社区版。 sdk最初将与C#和C ++一起使用。这项研究还处于初期阶段,所以我还没有使用过sdk。
这是一种有效的方法,即最初是通过CREATE查询填充到数据库吗? 我的方法是将数据分解为基本类型是一个好的方法吗?或者是否存在这种方法可能产生的问题。
先谢谢。
答案 0 :(得分:2)
这是一个非常大的Cypher查询!!!
使用LOAD CSV FROM...
填充数据库并提供包含要加载的数据的CSV文件,您会做得更好。
有关详细说明,请查看:
https://neo4j.com/developer/guide-import-csv/
(此页面还讨论了真正大型数据集的批处理加载程序。)
由于您要为Cypher查询生成代码,我不认为生成CSV文件会有太多麻烦。
(作为性能的指标,我今天已经在我的笔记本电脑上运行的Neo4j中加载了100万条记录,不到两分钟。)