Neo4j批量更新数据的技巧_第1页
Neo4j批量更新数据的技巧_第2页
Neo4j批量更新数据的技巧_第3页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Neo4j批量更新数据的方法相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据。当数据量非常大时,这种做法非常耗时,大多数时间耗费在连接数据库和打开事务上, 高效的做法是利用 Neo4j提供的参数(Parameter )机制和UNWIND 子句:在一次数据 更新中,进行一次连接,打开一次事务,批量更新数据;参数用于提供列表格式的数据, UNWIND子句是把列表数据展开成一行一行的数据,每行数据都会执行结构相同的 Cypher语句。再批量更新图形数据之前,用户必须构造结构固定的、参数

2、化的Cypher语句。当Cypher语句的结构相同时,Neo4j数据库直接从缓存中复用已生成的执行计划,而不需要重新生成,这也能够提高查询性能。除了官方的Neo4j Driver 之外,本文分享使用 Neo4jClie nt 对图形数据批量更新, Neo4jClie nt提供的功能更强大,并支持参数和批量更新操作。一,参数和UNWIND 子句1,通过RESTful API传递参数Neo4j提供HTTP API处理Cypher语句和参数,在示例代码中,Neo4j的参数通过HTTP请求传递,statement 定义的是查询语句,parameters 定义的是参数。在批量更新数据时,没有必要发送多个

3、HTTP请求,通过参数,可以在一个HTTP请求(Request )中,开始一个事务,在事务中执行 Cypher语句批量更新数据,最后提交该 事务。在发送HTTP请求传递参数批量更新数据时,设置HTTP Request的参数如下:POST http:/localhost:7474/db/data/transaction/commitAccept: applicati on/json;charset=UTF-8Conten t-Type:applicati on/json注意:在HTTP API中,引用参数的格式是:param。"statements" : "stat

4、ement" : "CREATE (n props) RETURN n","parameters" : "props" : "name" : "My Node"2,展开(UNWIND )子句UNWIND 子句把列表式的数据展开成一行一行的数据,每一个行都包含更新所需要的全部信息,列表式的数据,可以通过参数来传递。例如,定义参数events,该参数是一个 JSON字符串,键events是参数名,其值是 一个数组,包含两个数组元素。"events" : "ye

5、ar" : 2014, "id" : 1, "year" : 2014, "id" : 2 通过$events引用参数,UNWIND子句把events数组中的两个元素展开,每个元素 执行一次Cypher语句,由于Cypher的语句结构固定,因此,执行计划被缓存起来,在执 行数据更新任务时,参数被 UNWIND 子句展开,复用执行计划,提高数据更新的速度。UNWIND $eve nts AS eve ntMERGE (y:Year year: event.year )MERGE (y)v-:IN-(e:Event id: ev

6、ent.id )RETURN e.id AS xORDER BY x二,在Neo4j Browser中使用参数Neo4j Browser 是Neo4j内置的浏览器,用于管理数据库,更新数据库和查询数据, 再命令窗体中,通过“:”能够引用内置的命令,例如,通过 ":param"能够定义参数,并能 够在下一个Cypher语句中引用参数。1,通过:param命令定义参数在Neo4j Browser中,输入第一个命令,通过:param 命令定义参数,:param events: (year: 2014, id: 1, year: 2014, id: 22,通过$param引用参数紧

7、接着,输入 Cypher语句,通过$param引用参数UNWIND Sevents AS eventMERGE (y:Year year: eventTyear )MERGEIN-(e:Event id: event*id )RETURN e.id AS xORDER BY x3,查看创建的图形参数是一个列表格式的数据,在参数 events中,两个eve nt的year属性都是2014 , 因此,MERGE子句只会创建一个 Year节点;由于两个eve nt的id属性不同,因此MERGE 子句会创建两个 Eve nt节点,并创建 Year节点和Event节点之间的关系,图形如下图:$ matc

8、h(n) return nEvent(2)GraphYear(1)2J14三,使用Neo4jClient批量更新数据在工程(Projects )中输入命令安装 Neo4jClient,Package-I nstall Neo4jClie nt1,连接Neo4j数据库创建客户端,连接到数据库,创建的Uri的格式是:http:/host_name:7474/db/data,并输入用户名和密码,然后创建图形客户端,并连接到Neo4j数据库。private GraphClie nt _clie nt;public Neo4jClie ntProvider()_client = new GraphCli

9、ent(newUri("http:/localhost:7474/db/data"),"user_name","password");_clie nt.C onn ect();2,批量创建节点传递List<T>参数,通过Unwind 函数引用List,并为参数命名为"ns",在Cypher语句中引用参数"ns"public void CreateNodes(List<DataModel> no des)_clie nt.Cypher.Unwind(no des,"

10、;n s").Create("( n:NodeLable)").Set(" n.NodelD=ns.NodelD").Set(" n.Name=ns.Name").ExecuteWithoutResults();2,批量创建关系在List<T>参数中,传递两个节点的映射,在Neo4j数据库中,关系必须具有类型,因此,在把参数传递到Neo4j数据中时,需要确定两个节点和关系类型,以创建关系public bool CreateRelati on ships(List<Relati on shipModel>no des)_clie nt.Cypher.Unwind(no des,"n s").Match("( n:Lable

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论