如何在Neo4j中插入JSON批量数据?

时间:2018-07-04 13:24:06

标签: json neo4j cypher

我无法在Neo4j中插入大量JSON数据

如果我在Neo4j中插入更多数据,这意味着将花费更多时间来运行它,并使我的性能非常慢,并且我必须等待10-15分钟才能完成整个插入过程。

关于如何插入批量数据,是否有任何解决方案或建议?我在插入JSON数据时使用了合并查询,并且没有唯一值,因此我选择了一些组合来在合并查询中创建对象模型。

dir_port sym_dev ini_tiator_group_name host_lun sym_metrix_id

此查询中没有唯一约束来获取对象模型,我们使用了我上面提到的值的组合

这是我的查询

CALL apoc.load.json('file:<path>')YIELD value AS row   
    UNWIND row.symdev AS symdevs    
    MERGE (accesssymdev:symaccess_symdev {
      sym_dev:symdevs.sym_dev,  
      ini_tiator_group_name:symdevs.ini_tiator_group_name,  
      host_lun:symdevs.host_lun,  
      symid:symdevs.sym_metrix_id,  
      dir_port:symdevs.dir_port
    })   
    ON CREATE SET   
      accesssymdev.attr_percentage = symdevs.attr_percentage,  
      accesssymdev.cap_mb = toFloat(symdevs.cap_mb),  
      accesssymdev.physicaldevicename = symdevs.physicaldevicename;   

这是我的示例JSON值:

{
  "dir_port": "011:000",
  "attr_percentage": "(m)",
  "sym_metrix_id": "123456",
  "sym_dev": "05467",
  "ini_tiator_group_name": "cluster_abcdefgh_mnop_sss1",
  "host_lun": "52",
  "cap(mb)": "246369",
  " physicaldevicename": "not visible"
},
{
  "dir_port": "001:000",
  "attr_percentage": "(m)",
  "sym_metrix_id": "123456",
  "sym_dev": "03as1",
  "ini_tiator_group_name": "cluster_abcdefgh_mnop_sss1",
  "host_lun": "54",
  "cap(mb)": "210000",
  " physicaldevicename": "not visible"
},

1 个答案:

答案 0 :(得分:0)

如果您的MERGE上没有节点密钥索引约束,则更多数据MERGE将花费更多时间。

对于您而言,最好的方法是创建一个节点密钥:CREATE CONSTRAINT ON (n:symaccess_symdev) ASSERT (n.sym_dev, n.ini_tiator_group_name, n.host_lun, n.symid, n.dir_port) IS NODE KEY