Neo4j图数据库的基本使用

Neo4j图数据库的基本使用

2023年7月21日发(作者:)

Neo4j图数据库的基本使⽤图数据库的笔记· 前⾔SQL:(Structrue Query Language)结构化查询语⾔⽬前除了主流的关系⾏数据库如:MySQL、ORACLE、SQL SERVER等,还有NoSQL数据库(资料库)主流的Nosql实际上分4⼤类别:k,v类型的数据库⽂件存储数据库列式存储数据库图数据库redismongoDBHbaseNeo4j等 nosql的有优点:(常⽤的nosql底层都是基于集合的) · 适⽤于半结构化数据(XML、JSON) · 可⽔平扩展 · ⽆需定义数据库表结构 · 可以保证不同栏位内容的资料 · 出⾊的性能 · 经济 · 同时⽀持事务,能够保证更新ACID的机制,类似于其他的RDBM nosql的缺点: · 较松散的资料库交易 · 不⽀持join(只⽀持简单的join) · 没有定义资料完整性规则 · 没有SQL或者只⽀持部分SQL · 使⽤较⾼的存储空间(冗余、⾮正规化) · 使⽤经验还不够成熟图数据库主要是⽤来解决关系⾏数据库的join查询问题,当查询的深度很深时,MySQL的查询能⼒很明显不如图数据库,Neo4j是⼀个原⽣的图数据库,通过基于图数据结构存储数据,在深度为3时,Mysql的查询能⼒差不多是Neo4j的1/30,同时Neo4j⽀持ETL⼯具;初学者向导4j下载,google搜索neo4j download从社区下载免费版2.安装,可以安装在windows、linux、macos3.每天定时备份⾃⼰的资料库,作业脚本关键字:Nodelocalhost:7474 username:neo4j /password:neo4j -> change pssword= new_pswdNeo4j的查询语⾔CypherSET 新添属性DELETE 删除顶点MERGE 创建节点并建⽴关系MERGE| CREATE(c:Country {id: 668 ,name: "China"})---------MATCH|MERGE(c:Country {id: 668 ,name: "China"}) ## 先匹配到,然后再添加属性或者删除nodeDELETE cSET = "zhongguo"

-----------同时可以对接EXCEL倒⼊数据到库中,并关联已经存在的 toInteger() toFloat() datatime().csv⽂件必须在neo4j的指定⽬录.../import 下⾯LOAD CSV WITH HEADERS FROM "file:///" as row ## row 类似于别名,⼀列⼀列的读取CSV中的数据MATCH(c: Country {id: 668, name: "China", ename: "zhongguo"})WITH c,rowMERGE (d: City {id: , name: , longitude: toFloat(ude) ,latitude: toFloat(de)})MERGE|CREATE (d) -[r:BELONG{created_by:"shufang"}]->(c) ## 建⽴连接,尽量不⽤CREATE代替MERGE,能⽤MERGE代替CREATE关键字: CREATE、MERGE、MATCH、 DELETE、 RETURN、 SET 、 LOAD、CSV、 WITH、HEADERS、 AS...(:Person) -[:LIVES_IN]-> (:City) -[:PART_OF]-> (:Country) ## 表⽰关系-------------------代表⽆向关系<- and ->代表有向关系[...]⽤来添加详细关系信息 如 MERGE (a)-[r: Like]->(b)---------------------------------------------------(keanu:Person:Actor {name: "Keanu Reeves"} )-[role:ACTED_IN {roles: ["Neo"] } ]->

(matrix:Movie {title: "The Matrix"} )这个模型所包含的意思是:“keanus”这个“⼈”是⼀个“演员”,他在电影“the Matrix”中饰演 “Neo”这个⾓⾊---------------------------------------------------为了减少重复增加模块性,可以⽤变量接受模块如下:acted_in = (:Person)-[:ACTED_IN]->(:Movie) 顶点 -[ralation:关系标签 {动作:关系属性}]-> 顶点其中 acted_in 是⼀个变量,接收了这个模块通过 MERGE可以创建⼀个模块----------MATCH(C:PERSON) WHERE = "WORLD"MERGE (C)-[]->(B)

ON CREATE SET = "HELLO"

RETURN ,B· Neo4j整合项⽬Neo4j得到合作伙伴,⽤户和社区贡献者提供的丰富的库,⼯具,驱动程序和指南⽣态系统的⽀持。我们想概述可⽤的内容并链接到原始资源。我们尝试将重点放在这⾥的免费解决⽅案上,并提供指向商业选项的链接。以下地址涵盖了各种通过CSV⽂件导数据到NEO4J的使⽤⽅法,同时介绍了各种⼯具,以及Cypher⽅式的导⼊:Neo4j除了⽀持CSV的资料汇⼊,通过LOAD CSV WITH HEADERS FROM "" AS ROW,同时还⽀持以下的项⽬整合:· Neo4j与关系型数据⽐较SQL 与 Cypher 的⽐较:需要频繁的join、⽽Cypher不需要,只需要做简单的MATCH操作WHERE操作就⾏,代码量更少相对于SQL查询效率要更⾼与Cypther同时都⽀持JDBC的接⼝,Cypher的JDBC接⼝代码简单实现如下:Connection con = nection("jdbc:neo4j://localhost:7474/");String query = "MATCH (:Person {name:{1}})-[:EMPLOYEE]-(d:Department) RETURN as dept";try (PreparedStatement stmt = eStatement(QUERY)) { ing(1,"John"); ResultSet rs = eQuery(); while(()) { String department = ing("dept"); .... }}SQL StatementSELECT name FROM PersonLEFT JOIN Person_Department ON = Person_IdLEFT JOIN Department ON = Person_mentIdWHERE = "IT Department"Cypher StatementMATCH (p:Person)-[:WORKS_AT]->(d:Dept) ## 关系,有点类似于scala中的模式匹配WHERE = "IT Department" ## filterRETURN ## 返回将NoSQL知识转换为图形计算平均收⼊?询问关系数据库。建⽴购物车?使⽤键值存储数据库。是否存储结构化产品信息?存储为⽂档数据库。描述⽤户如何从A点到达B点?按照图数据库。下图显⽰了每种数据库类型如何在测量深度和⼤⼩的频谱上叠加。虽然键值存储可以处理⼤量数据,但它们是为数据的⾼级视图(低深度)⽽设计的。图形数据库保留最⼩化的⼤⼩,即使⽐其他类型的数据库具有更⼤的数据深度也是如此。其他类型的数据库介于这些范围之间。Neo4j组件介绍Neo4j图形数据库–我们的核⼼图形数据库,⽤于存储和检索连接的数据。有 -社区版和企业版。我们平台中的所有内容都与数据库中存储的数据进⾏交互。–⽤于管理Neo4j本地实例的应⽤程序。免费下载包括Neo4j企业版许可证。–在线浏览器界⾯,⽤于查询和查看数据库中的数据。使⽤Cypher查询语⾔的基本可视化功能。–业务⽤户的可视化⼯具,不需要任何代码或编程技能即可查看和分析数据。也是我们的⽂档部分找到。Neo4j ETL ⼯具许多⼈希望将其关系系统中的数据导⼊Neo4j。开发Neo4j ETL⼯具是为了使此初始导⼊变得简单。它从任何关系数据库中提取模式,并允许您将其转换为所需的图模式。然后,它将以批量或在线模式将数据导⼊图形中。您⽆需了解Cypher即可使⽤此⼯具,它可以处理所有繁重的⼯作。这使您可以浏览已经知道为图形的数据集。ETL-Tool Graph App、可⽤性和安装ETL-Tool Graph App可以通过 安装到Neo4j Desktop中。创建项⽬和数据库实例后,需要转到Graph ApplicationsNeo4j Desktop中的选项卡,将/neo4j-etl-appNeo4j ETL⼯具的URL 复制并粘贴到安装框中,然后单击Install按钮。ETL⼯具功能介绍:Neo4j Desktop中的Neo4j-ETL Graph App管理多个RDBMS连接从关系数据库中⾃动提取数据库元数据推导图模型直观地编辑标签,关系类型,属性名称和类型将当前模型可视化为图形坚持映射为json从关系数据库中检索相关的CSV数据运⾏批量或在线导⼊将MySQL,PostgreSQL捆绑在⼀起,允许Neo4j Enterprise使⽤⾃定义JDBC驱动程序APOC(awesome procedures on Cypher ),具体安装如下链接:apoc可以⽤来导⼊各种数据.csv .json .xml .jdbc .xxx//graph algorithms 图算法//TODO//graphQL 、Grandstack是⼀个平台,⽆缝集成了jscript grand可以将带注释的graphsql转化成单个cypher执⾏type Movie { title: ID! released: Int tagline: String actors: [Person] @relation(name:"ACTED_IN", direction:IN) director: Person @relation(name:"DIRECTED", direction:IN) recommendation(first:Int = 3): [Movie] @cypher(statement:"MATCH (this)<-[r1:REVIEWED]-(:User)-[r2:REVIEWED]->(reco:Movie) WHERE 3 <= <= RETURN reco, sum() as rating ORDER BY rating DESC")}interface Person { name: ID! born: Int}type Actor extends Person { name: ID! born: Int movies: [Movie] @relation(name:"ACTED_IN")}type Director extends Person { name: ID! born: Int movies: [Movie] @relation(name:"DIRECTED")}type Mutations { directed(movie:ID! director:ID!) : String @cypher(statement:"MATCH (m:Movie {title: $movie}), (d:Person {name: $director}) MERGE (d)-[:DIRECTED]->(m)")}schema { mutations: Mutations}GrandStack、GraphQL架构原理:[外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传(img-gCMfx40O-32)(/Users/shufang/Desktop/neo4j_myself/pics/grandstack_)]Neo4j可视化⼯具和产品可视化能够直观的带来价值,所以需要可视化Neo4j可视化⼯具: · Neo4j Browser(开发者) · Neo4j Bloom (是⼀种商业许可产品,主要为⾮开发⼈员设计的,可以⽤⾃然语⾔进⾏查询)Neo4j⽀持java开发Neo4j‘s javaDriver代码⽰意maven依赖 neo4j-java-driver 1.5.2 import .v1.*;/** * @ ClassName HelloWorldExample * @ Author shufang * @ Descripetion * @ Date 2019/10/20 21:34 * @ Version 1.0 */public class HelloWorldExample implements AutoCloseable { private final Driver driver; public HelloWorldExample(String uri, String user, String password) { //1.获取驱动对象 driver = (uri, (user, password)); } @Override public void close() throws Exception { (); } //创建会话以及事务 public void printGreeting(final String message) { try (Session session = n()) { String greeting = ransaction(new TransactionWork() { @Override public String execute(Transaction tx) { StatementResult result = ("CREATE (a:Greeting) " + "SET e = $message " + "RETURN e + ', from node ' + id(a)", ters("message", message)); return ().get(0).asString(); } }); n(greeting); } } public static void args) throws Exception { try (HelloWorldExample greeter = new HelloWorldExample("bolt://localhost:7687", "neo4j", "lanSHU19920725")) { reeting("hello, world"); } }}Cypher typeStringIntegerFloatBooleanJava typeStringLongDoubleBooleanPointCypher typeDateTiava o4j性能调优Neo4j拓展知识//TODO!Neo4j与spark的GraphX图分析系统的整合GraphX特点:离线计算、批量处理,基于同步的BSP模型(Bulk Sychronous Parallel Computing model,整体同步并⾏计算模型),这样能保证提升数据处理的吞吐量和规模,但是在速度⽅⾯会稍微逊⾊⼀筹,⽬前⼤规模的图处理框架还有基于MPI模型的异步图计算模型GraphLab 和同样基于BSP模型的Giraph等除了Neo4j可以与GraphX组合使⽤外,还有另外的Janusgraph分布式图数据库可以与GraphX进⾏组合使⽤,但是janusGraph不是原⽣的图数据库,基于Hbase存储,这2个数据库都能作为GraphX的持久层。可以存储⼤规模的图数据。Graph内部提供了三种RDD来对⼀个有向多重图的属性进⾏描述: · VertextRDD extends RDD · EdgeEDD[ED,VD] extends RDD · Triplet

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689900238a293348.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信