马修·格雷·古柏勒,push push baby,丘倩鸣
如果不算上标签,属性图自身的关系可以用下图表示:
A:因为关系型数据库不擅长处理数据之间的关系。
Q:能举个更详细的对比例子吗?
A:假设我们要查找某个公司的员工Alice属于哪个部门。
A,先要通过员工信息表找到Alice对应的工号;
B,再使用工号去关系表中找到其对应的部门ID;
C,最后使用部门ID在部门信息表中找到部门名称等信息。
A需要一次索引查找过程,B也需要一次索引查找,C可能需要3次索引查找。如果是个大型公司,员工数万甚至十多万,那么员工和部门对应关系表的记录会非常多,B的查找效率会远低于A和C。
a,先通过在员工标签Person上建立的全局索引(可稀疏)来找到Alice对应的节点Na;
b,再通过Na节点保存的标签为BELONGS_TO的边来找到对应的部门;
c,最后读取部门信息。
虽然也可以分为3步,但效率却大不相同。a的效率基本等价于A;b无需进行索引查找,直接可以通过Na节点获取,虽然Na节点可能存在非常多不同标签的边,但跟员工和部门关系表的记录数肯定不是一个数量级的,而且通过Na查找边时还可以走Na节点的局部索引来加速查找;c的效率不同的图数据库会有所不同,对于支持免索引邻接的Neo4J等图数据库,Na直接指向3个部门节点的物理地址,对于其他非原生图存储的数据库,比如JanusGraph,需要查找在部门标签Department上建立的全局索引。
Q:有具体的性能测试数据不?
A:我们举最经典的社交网络中查询的性能作为对比。
本文地址:http://www.reviewcode.cn/jiagousheji/177126.html 转载请注明出处!