Neo4j:用图结构重新理解数据之间的关系
文章目录
- Neo4j:用图结构重新理解数据之间的关系
- 1、 它解决什么问题
- 2、 性能和事务支持
- 3、 怎么用
- 4、 构建和二次开发
- 5、 适合什么场景
Neo4j:用图结构重新理解数据之间的关系
Neo4j 在 GitHub 上拿到了 16,761 Star。
这是一个图数据库,核心思路很简单:数据之间的关系,和数据本身一样重要。传统关系型数据库用表格存数据,表和表之间靠外键关联,查询多层关系时要写一堆 JOIN,性能随层数指数级下降。Neo4j 用节点和关系直接建模,查三层关系和查一层关系的速度差不多。
1、 它解决什么问题
很多业务场景天然就是图结构。社交网络里人和人的关注关系,电商里用户、商品、订单之间的购买链路,金融领域里账户之间的资金流转,知识图谱里实体之间的语义关联。这些场景如果用关系型数据库建模,表结构会变得复杂,查询语句冗长,性能也不理想。
Neo4j 把这些关系直接存储为图。每个实体是一个节点,每条关系是一条边,边上还能带属性。查询的时候沿着图的路径走就行,不需要拆表、不需要 JOIN。
它的查询语言叫 Cypher,语法设计得比较直观。比如查"张三的朋友的朋友",写法大致是:
MATCH (a:Person {name:"张三"})-[:FRIEND]->(b)-[:FRIEND]->(c) RETURN c换成 SQL 要写两三层子查询或者自连接,可读性差很多。
2、 性能和事务支持
Neo4j 是 ACID 事务数据库,这一点和 MySQL、PostgreSQL 一样。写入操作有完整的事务保障,不会出现部分写入的情况。
性能方面,图数据库在处理关系密集型查询时优势明显。关系型数据库查"六度分隔"这类问题,JOIN 次数越多越慢。Neo4j 的底层存储结构是无索引邻接,每个节点直接持有指向相邻节点的物理指针,遍历关系的复杂度和数据总量无关,只和遍历的路径长度有关。
3、 怎么用
Neo4j 提供了两种使用方式。
第一种是 Neo4j Aura,官方的全托管云服务。注册就能用,免费版不需要绑信用卡,适合快速体验和小规模项目。在 Aura 控制台里可以直接写 Cypher 查询,也能用内置的可视化工具查看图结构。
第二种是本地部署。从官网下载安装包,解压后运行启动命令就行:
bin/neo4j-admin server start默认监听localhost:7474,浏览器打开就能进入管理界面。
Neo4j Desktop 是另一个选择,专门面向本地开发场景。它把数据库实例的管理、插件安装、数据导入这些操作都封装好了,界面操作为主,适合不想折腾命令行的开发者。
4、 构建和二次开发
Neo4j 社区版基于 GPLv3 协议开源,可以自由使用和修改。企业版包含闭源组件,需要商业授权。
源码用 Maven 构建,依赖 JDK 17 和 Maven 3.8.2。构建命令:
mvn cleaninstall-T1C如果只想编译不跑测试,加-DskipTests参数。macOS 用户需要先装 Homebrew,Ubuntu 用户用 apt-get 装 maven 和 openjdk-17-jdk。
官方鼓励社区参与开发,可以提交扩展、开发驱动库,或者直接改核心代码。提交代码需要签 Contributor License Agreement。
5、 适合什么场景
几个典型用法:
做知识图谱的团队,实体和关系数量大,查询需要多层跳转,用 Neo4j 比关系型数据库省很多事。
做风控的场景,账户之间的转账关系是天然的图结构,跑图算法(比如社区发现、最短路径)能快速识别异常模式。
做推荐系统的,用户行为数据建模成图,沿着关系路径做协同过滤,比传统的矩阵分解方法更直观。
Neo4j 还提供了配套的图分析工具,支持数据查询、可视化和图算法,可以在 Aura 上免费使用,也能连接自建的数据库实例。
方法更直观。
Neo4j 还提供了配套的图分析工具,支持数据查询、可视化和图算法,可以在 Aura 上免费使用,也能连接自建的数据库实例。
