Neo4j从入门到放弃

前言

本文记录前公司在开发社交应用时,探索Neo4j数据库记录的一些关键信息和常见问题。希望这篇文章的一些信息能对你有所帮助。少走一些弯路。Neo4j的学习最好在搭建完后,它的web管理界面有一个引导教程,跟着它的指导手册走下教程,他的教程简单易懂,是不错的入门引导教程。关注本人的公众号:鲁班曰

概述

Neo4j is the world’s leading graph database. The architecture is designed for optimal management, storage, and traversal of nodes and relationships.
The graph database takes a property graph approach, which is beneficial for both traversal performance and operations runtime

Neo4j 是世界领先的图数据库。 该架构旨在优化管理、存储、节点和关系的遍历。 图数据库采用属性图方式,对遍历性能和操作运行时间这两个方面能获取不错的收益。

环境搭建

  1. jdk环境配置
  2. Neo4j解压安装
  3. neo4j start即可
    默认web端口7474 默认账号密码neo4j/neo4j
    服务器连接端口7687

基本概念

节点:表示某个领域的实体
关键点:

  1. 节点经常被表示为实体或者离散对象,节点可以被0个或多个标签归类
  2. 数据存储在节点的属性中
  3. 属性是简单的键值对
    标签:通过将节点分组为集合来构造特定领域
    关键点
  4. 一个节点可以有0到多个标签
  5. 标签被用于归类节点
    关系:连接两个节点
    关键点
  6. 关系总是有一个方向
  7. 关系总是有一个类型(type),(其实这个type就是标签名,这个也是自己的理解)
  8. 关系形成数据模式和图的结构
    属性:添加性质到节点和关系的命名值。
    在这里插入图片描述

命名规范

这个是Node label、Relationship type、property的官方命名规范
在这里插入图片描述

Neo4j相关工具介绍

Neo4j Desktop

Neo4j Desktop is a client application to help you work with Neo4j, whether you are just getting started or have prior experience. It is designed to help you as a new user to learn and experiment with Neo4j locally by including everything you need to get started. Once you know Neo4j, Desktop becomes your local development environment for projects where you will use Neo4j. With Neo4j Desktop, you can create any number of local databases as supported by the resources of your machine

Neo4j Desktop 是一个客户端应用程序,可帮助您使用 Neo4j,无论您是刚入门还是有经验。 它旨在帮助您作为新用户在本地学习和试验 Neo4j,包括您开始所需的一切。 一旦您了解了 Neo4j,Desktop 就会成为您将使用 Neo4j 的项目的本地开发环境。 使用 Neo4j Desktop,您可以根据您的机器资源创建任意数量的本地数据库

个人感觉这个就是好处就是可以下载插件,因为我目前还不知道插件去哪里下载,其他没什么鸟用,操

GraphGist

Building a graph of your data is fairly simple as the graph structure represents the real world much better than columns and rows of data. GraphGists are teaching tools which allow developers to explore how data in a particular domain would be modeled as a graph and see some example queries of that graph data
构建数据图表相当简单,因为图表结构比数据的列和行更能代表现实世界。 GraphGists 是一种教学工具,允许开发人员探索如何将特定领域中的数据建模为图,并查看该图数据的一些示例查询

NeoDash

NeoDash is an open-source, low-code Dashboard Builder for Neo4j. It lets you build an interactive dashboard with tables, graphs, bar charts, line charts, maps and more.

NeoDash 是用于 Neo4j 的开源、低代码仪表板生成器。 它使您可以使用表格、图形、条形图、折线图、地图等构建交互式仪表板

Cypher语言

Neo4j的图查询语言
Neo4j的Cypher语言专为处理图数据而构建

  • 使用模式来描述图数据
  • 熟悉的类似SQL的语句
  • 声明性的,描述要查找的内容,而不是如何查找

create

在这里插入图片描述

MATCH (ee:Person) WHERE ee.name = 'Emil'
CREATE (js:Person { name: 'Johan', from: 'Sweden', learn: 'surfing' }),
(ir:Person { name: 'Ian', from: 'England', title: 'author' }),
(rvb:Person { name: 'Rik', from: 'Belgium', pet: 'Orval' }),
(ally:Person { name: 'Allison', from: 'California', hobby: 'surfing' }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)

上面的语句包含查询和创建节点和创建关系,而且是创建多条

match

在这里插入图片描述

删除节点delete,不能删除含有关系的节点

MATCH(p:Person) DELETE p;

导入数据

Neo4j 有许多强大的数据加载选项,无论是用于
在线导入的多功能 LOAD CSV Cypher命令、
用于其他格式的 APOC 程序,
还是用于快速引导完整数据库的 neo4j-admin 导入
这些工具虽然功能强大,但具有学习曲线,当您刚开始时可能会妨碍您
所以可以使用Neo4j Data Importer一个小巧但功能强大的无代码 UI,用于将平面文件数据加载到 Neo4j 数据库中,地址如下

默认导入数据文件存放文件夹位置,可以通过配置修订
在这里插入图片描述

如果导入的数据非常多,可以通过使用周期提交
在这里插入图片描述

默认1000条记录提交一次,也可以自己设置

在这里插入图片描述

学习案例

First Steps with Cypher

通过这个案例能学习shotestPath函数,还有*…5这个操作

Northwind Recommendation Engine

基于内容的推荐
match (c:Customer)-[:PURCHASED]->(o:Order)-[:PRODUCT]->(p:Product)
<-[:PRODUCT]-(o2:Order)-[:PRODUCT]->(p2:Product)-[:PART_OF]->(:Category)<-[:PART_OF]-(p)
WHERE c.customerID = 'ANTON' and NOT( (c)-[:PURCHASED]->(:Order)-[:PRODUCT]->(p2) )
return c.companyName, p.productName as has_purchased, p2.productName as has_also_purchased, count(DISTINCT o2) as occurrences
order by occurrences desc
limit 5

我们可以为客户做出的最简单的推荐是基于内容的推荐。 根据他们以前的购买情况,我们可以向他们推荐他们尚未购买的任何东西吗? 对于我们的客户购买的每种产品,让我们看看其他客户也购买了什么。 每个 :Product 都与一个 :Category 相关,因此我们可以使用它来进一步缩小要推荐的产品列表

  1. 用户购买的商品p
  2. 该商品被其他订单购买
  3. 其他订单还买了什么商品P2
  4. 且其他商品p2和用户购买的商品p同属一个类别
  5. 其他商品p2用户还没买过
Collaborative Filtering(协同过滤)
MATCH (c:Customer)-[:PURCHASED]->(o:Order)-[:PRODUCT]->(p:Product)
WITH c, count(p) as total
MATCH (c)-[:PURCHASED]->(o:Order)-[:PRODUCT]->(p:Product)
WITH c, total,p, count(o)*1.0 as orders
MERGE (c)-[rated:RATED]->(p)
ON CREATE SET rated.rating = orders/total
ON MATCH SET rated.rating = orders/total
WITH c.companyName as company, p.productName as product, orders, total, rated.rating as rating
ORDER BY rating DESC
RETURN company, product, orders, total, rating LIMIT 10
  1. 获取每个客户购买商品总数
  2. 获取每个客户每个商品的购买数量
  3. 商品购买数量/商品总数得到分数rating
  4. 并创建客户到商品的关系©-[rated:RATED]->§

查询调优

基本的查询优化案例

MATCH (p {name: 'Tom Hanks'}) RETURN p

这里没有加label,会对所有node进行扫描

所有加如下

MATCH (p:Person {name: 'Tom Hanks'}) RETURN p

进一步优化就是给name加索引

CREATE INDEX FOR (p:Person) ON (p.name)

高级查询优化案例

  1. 通过 profile分析发现,name是直接从索引获取的
PROFILE MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
   WHERE p.name STARTS WITH 'Tom'
   RETURN  p.name AS name,  count(m) AS count
  1. 如果我们改变上面的查询,如下
PROFILE MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
RETURN  p.name AS name,  count(m) AS count

这个时候name并没有从缓存中获取,再次访问数据库才获取到name

如何解决这个问题

使用Predicates可以启用优化

  • Existence (e.g. WHERE n.name IS NOT NULL)
  • Equality (e.g. WHERE n.name = ‘Tom Hanks’)
  • Range (e.g. WHERE n.uid > 1000 AND n.uid < 2000)
  • Prefix (e.g. WHERE n.name STARTS WITH ‘Tom’)
  • Suffix (e.g. WHERE n.name ENDS WITH ‘Hanks’)
  • Substring (e.g. WHERE n.name CONTAINS ‘a’)
  • Several predicates of the above types combined using OR, given that all of them are on the same property (e.g. WHERE n.prop < 10 OR n.prop = ‘infinity’)

还有一种方式就是创建约束,(这个要求企业版才有的特性,对我没用)

CREATE CONSTRAINT constraint_name FOR (p:Person) REQUIRE p.name IS NOT NULL

之后不使用Predicates也可以触发优化

聚合函数

除了上面加Predicates外,我们也可以通过聚合函数达到优化的目的如下

PROFILE
MATCH (p:Person)
RETURN count(DISTINCT p.name) AS numberOfNames

在这种情况下,聚合函数的语义就像隐式存在predicate一样工作,因为没有属性名称的 Person 节点不会影响聚合的结果

约束

创建约束的同时也是创建索引

CREATE CONSTRAINT constraint_name FOR (book:Book) REQUIRE book.isbn IS UNIQUE

索引

创建索引

CREATE INDEX node_index_name FOR (n:Person) ON (n.surname)

显示索引列表

SHOW INDEXES

删除索引

DROP INDEX index_name

自定义Procedures和Functions

最好先看下plugins目录下的README.txt文件
User Defined Procedures and Functions
Extending Neo4j

Springboot应用连接Neo4j和crud操作示例

Spring Data Neo4j

常见问题

时间不对处理

在使用Neo4j的时候发现其日志中时间非东八区时间,修改配置文件指定使用当前系统时间即可
dbms.db.timezone=SYSTEM

在这里插入图片描述

无法远程访问browser的问题处理,修改配置如下

在这里插入图片描述

SpringBoot开启Neo4j语句日志打印

logging.level.org.springframework.web=debug
logging.level.org.neo4j.ogm=debug
logging.level.org.springframework.data.neo4j=debug
logging.level.org.neo4j.driver.GraphDatabase=debug

logging.level.org.neo4j.driver.OutboundMessageHandler=debug
logging.level.org.neo4j.driver.InboundMessageDispatcher=debug

忘记密码如何处理

参考文献

Neo4j document
Extending Neo4j
Cypher语言参考手册
常见问题
Difference between Function and Procedure
Spring Data Neo4j
Example Project
Query Tuneing
如何理解predicate这个词?
Index-free adjacency
试卷样例
Importing CSV Data into Neo4j
:auto using periodic和 using periodic
Neo4j-OGM Object到图实体的映射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/427685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内网穿透的应用-如何修改Nginx服务location代理转发规则结合cpolar实现无公网ip环境访问内网站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

【FastChat】用于训练、服务和评估大型语言模型的开放平台

FastChat 用于训练、服务和评估大型语言模型的开放平台。发布 Vicuna 和 Chatbot Arena 的存储库。 隆重推出 Vicuna&#xff0c;一款令人印象深刻的开源聊天机器人 GPT-4&#xff01; &#x1f680; 根据 GPT-4 的评估&#xff0c;Vicuna 达到了 ChatGPT/Bard 90%* 的质量&…

HQL,SQL刷题,尚硅谷

目录 相关表数据&#xff1a; ​编辑 题目及思路解析&#xff1a; 复杂查询&#xff0c;子查询 1、查询所有课程成绩均小于60分的学生的学号、姓名 2、查询没有学全所有课的学生的学号、姓名 3、查询出只选修了三门课程的全部学生的学号和姓名 总结归纳&#xff1a; 知识补充&a…

端口号被占用时的解决办法

1、查看端口占用的进程号 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

XV4001KC数字输出 车载用(piezoman)

EPSON的XV4001KC角速度传感器是为满足汽车行业对高精度和高可靠性需求而设计的。它不仅提供了高级的运动监测特性&#xff0c;高精度的角速度测量和温度监测功能&#xff0c;而且其紧凑的设计6.04.83.3mm尺寸对于空间受限的车载环境来说&#xff0c;是一大优势&#xff0c;使得…

网络安全-appcms-master

一、环境 gethub上面自己找appcms-master 二、开始闯关 原理&#xff1a;在评论的时候提交可以提交到管理员列表去&#xff0c;管理员一看cookie和地址就被盗走了 点进去软件后会发现提交按钮 随便提交一下看看 放到div标签里面是不是有可能可以做&#xff0c;看看后台吧 那…

网络安全是什么

网络安全是一种保护计算机、服务器、移动设备、电子系统、网络和数据免受恶意攻击的技术&#xff0c;这种技术也称为信息技术安全或电子信息安全。该术语适用于从业务到移动计算的各种环境&#xff0c;可以分为几个常见类别: 网络安全是一种保护计算机网络免受入侵者&#xff0…

D4890可应用在对讲机上,采用 SOP8/MSOP8两种封装形式

D4890 目前客户主要使用在对讲机上&#xff0c;电压范围2.2V &#xff5e; 5.5V之间&#xff0c;输出功率&#xff08;THDN1%&#xff09;1.0W/8Ω 5.0V。采用 SOP8/MSOP8两种封装形式。 2、推荐的应用线路图如下&#xff1a; 3、实际测试输出波形如下&#xff08;VCC4.5V&…

首尔科技大学最新!基于DBSCAN算法的低分辨率LiDAR点云聚类系统,处理速度提高39.5倍

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D点云&#xff0c;拉你入群。文末附行业细分群 原文&#xff1a;首尔科技大学最新&#xff01;基…

Python爬虫:爬虫基本概念和流程

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

程序员竟然还有职业规划手册?

《程序员职业规划手册》不是一本具体的书&#xff0c;而是由前阿里技术总监雪梅老师讲授的一个专栏课程&#xff0c;总共有20讲&#xff0c;内容基本都是图片和文字形式&#xff0c;也有对应的语音讲述。 回顾了下毕业工作的这几年&#xff0c;我买过很多学习课程&#xff0c;…

老年人居家安全问题,全视通社区居家养老解决方案来赋能

近年来&#xff0c;老年人居家环境问题逐渐受到社会的关注。从新闻报道得知&#xff0c;传统居家环境对老年人存在诸多挑战&#xff0c;比如在入户空间、起居&#xff08;室&#xff09;厅、卧室、卫生间、厨房等区域。这些挑战不仅影响老年人的生活质量&#xff0c;还可能导致…

【Educoder数据挖掘实训】异常值检测-值域法

【Educoder数据挖掘实训】异常值检测-值域法 开挖&#xff01; 这个题中 l o f lof lof算法给的很抽象&#xff0c;先用比较通俗的方式说一下&#xff1a; 首要想法是找到不合群的点&#xff0c;也就是异常点。采用的方法是对局部可达密度进行判断。相较于其他普通的简单基于聚…

服务器后端是学习java还是php

没有绝对的"最好"语言&#xff0c;每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言&#xff1a; 1. Java&#xff1a;Java是一种通用且强大的语言&#xff0c;广泛用于企业级应用和大型系统。它有很好的性能和可靠性&#xff0c;并且具有优秀的生态系…

图像增强技术总结

最近科研需要改进算法&#xff0c;需要先对图像进行增强后处理&#xff0c;所以对图像增强技术做一个总结。图像增强的目的就是要提高图像的质量&#xff0c;在图像处理中&#xff0c;有两种提高图像质量的方法&#xff1a;一是图像在采集的过程中&#xff0c;知道图像质量降低…

正信法律:借款纠纷的民事起诉状怎么写

在借款纠纷中&#xff0c;当协商无果时&#xff0c;诉诸法律成为债权人追回债务的有效途径。而民事起诉状作为启动诉讼程序的法律文书&#xff0c;其撰写质量直接关系到案件的受理与判决。本文旨在简明扼要地阐述如何撰写一份规范的借款纠纷民事起诉状。 起诉状需包含以下几个关…

23种设计模式——工厂方法模式

定义&#xff1a; 一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。 工厂方法通用类图&#xff1a; 这个图更好理解 在工厂方法模式中&#xff0c;抽象产品类Product负责定义产品的共性&#xff0c;实现对事物最抽象的…

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

【C++从练气到飞升】01---C++入门

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 推荐 前言 什么是C C的发展史 &#x1f4cb;命名空间 命名空间定义 命名空间使用 命名空间的嵌套 std命名空间的使用 &#…