例子1:社交网络
-
假设有一个社交网络需要用数据库存储,其中人与人之间的关系有:朋友(friend)、父母(parent)
-
首先用关系数据库来实现朋友关系,需要 3 张表:people、people_relation、relation
如果要查询 Jam 的所有朋友的信息,那么就需要连接三张表:SELECT p.info FROM people p JOIN people_relation pr ON p.id = pr.pid2 JOIN relation r ON pr.rid = r.id WHERE r.name = 'f';
如果表的数据量较大,那么查询效率就会下降很多
-
如果使用图数据库存储呢?
- 首先需要创建节点和关系(边)
CREATE (:people {name: 'Jam', info:...}) ...
- 接着创建关系
CREATE (:people {name: 'Jam'})-[:f]->(:people {name: 'Tim'})...
- 最终查询 Jam 的所有朋友
MATCH (:people {name: 'Jam'})-[:f]-> (friend) RETURN friend.info;
- 首先需要创建节点和关系(边)
-
总结
在这个例子中,图数据库相对于关系数据库的优势:- 直观:通过节点和边来表示实体(people)及其之间的关系
- 高效查询:不需要编写复杂的联接查询来找到jam的所有朋友,只需要简单地通过jam节点遍历与其相连的边和节点即可。
- 灵活性和可扩展性:在关系数据库中,如果需要添加新的关系或属性,可能需要修改表结构。而在图数据库中,可以动态地添加节点、边和属性