Skip to main content

6. Neo.4j

什么是 Neo4j?

Neo4j 是一个开源的图数据库,适用于存储和查询复杂的关系数据,例如社交网络、推荐系统和知识图谱。

info

Neo4j 采用基于节点(Node)和关系(Relationship)的数据模型,比传统关系数据库更适合表示复杂的关系结构。

Neo4j 数据结构

Neo4j 的基本构成单元如下:

元素说明
Node(节点)数据实体,例如用户、产品、文章等
Relationship(关系)连接节点的边,定义节点之间的关系
Property(属性)附加在节点或关系上的键值对数据
Label(标签)给予节点分类,例如 :Person:Movie

创建数据库和数据模型

// 创建节点
CREATE (:Person {name: 'Alice', age: 30, email: 'alice@example.com'});

// 创建关系
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:FRIENDS_WITH]->(b);

Neo4j 增删改查(CRUD)

// 插入数据
CREATE (:Person {name: 'Bob', age: 25, email: 'bob@example.com'});

// 查询数据
MATCH (p:Person) WHERE p.age > 25 RETURN p;

// 更新数据
MATCH (p:Person {name: 'Alice'})
SET p.age = 31;

// 删除数据
MATCH (p:Person {name: 'Bob'}) DETACH DELETE p;

复杂查询示例

// 查找 Alice 的朋友
MATCH (a:Person {name: 'Alice'})-[:FRIENDS_WITH]->(friend)
RETURN friend;

// 计算社交网络中的好友数量
MATCH (p:Person)-[:FRIENDS_WITH]->(friend)
RETURN p.name, COUNT(friend) AS friends_count;

创建索引与优化查询

// 为 name 字段创建索引
CREATE INDEX FOR (p:Person) ON (p.name);

// 查询优化示例
EXPLAIN MATCH (p:Person {name: 'Alice'}) RETURN p;

事务管理

使用事务保证数据一致性
with driver.session() as session:
with session.begin_transaction() as tx:
tx.run("CREATE (:Person {name: 'Charlie', age: 27, email: 'charlie@example.com'})")
tx.run("CREATE (:Person {name: 'Dave', age: 29, email: 'dave@example.com'})")

结论

Neo4j 是一个强大的图数据库,适用于复杂关系建模和高效查询。通过 Cypher 语言和索引优化,可以高效管理和查询图数据。

更多 Neo4j 资源