关系型数据库与图数据库比较

关系型数据库与图数据库比较
关系型数据库是基于实体建模理念设计。 该设计理念并没有提供对这些实体间关系的直接支持。 在需要描述这些实体之间的关系时,我们常常需要创建一个关联表以记录这些数据之间的关联关系,而且这些关联表常常不用来记录除外键之外的其它数据。也就是说,这些关联表也仅仅是通过关系型数据库所已有的功能来模拟实体之间的关系。 这种模拟导致了两个非常糟糕的结果:数据库需要通过关联表间接地维护实体间的关系,导致数据库的执行效能低下;同时关联表的数量急剧上升。 在需要描述大量关系时,传统的关系型数据库已经不堪重负。它所能承担的是较多实体但是实体间关系略显简单的情况。而对于这种实体间关系非常复杂,常常需要在关系之中记录数据,而且大部分对数据的操作都与关系有关的情况,原生支持了关系的图形数据库才是正确的选择。它不仅仅可以为我们带来运行性能的提升,更可以大大提高系统开发效率,减少维护成本。 Graph databases address one of the great macroscopic business trends of today: leveraging complex and dynamic relationships in highly connected data to generate insight and competitive advantage. 什么是图形数据库呢?在这里我贴上较为官方的定义: a database that uses graph structures for semantic queries with nodes,edges and properties to represent and store data – independent of the way the data is stored internally. It’s really the model and the implemented algorithms that matter. 注意,这里只是说数据模型是图结构的,没有说数据的存储也一定要是图结构的。 Neo4j是由Java和Scala写成的一个NoSql数据库,专门用于网络图的存储。作为一个图形数据库,Neo4j有以下优点: 更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要join表)。 数据更直观,相应的SQL语句也更好写(Neo4j使用Cypher语言,与传统SQL有很大不同)。 更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而MySql中即意味着新的表,还要考虑和其他表的关系。 数据库操作的速度并不会随着数据库的增大有明显的降低,这得益于Neo4j特殊的数据存储结构和专门优化的图算法。 ## 存在免索引邻接属性(Index Free Adjacency),提供快速高效的图遍历 使用免索引邻接的数据库引擎中的每个节点都会维护其对相邻节点的引用。因此每个节点都表现为其附近节点的微索引,这比使用全局索引代价小很多。这意味着查询时间与图的整体规模无关,它仅和所搜索图的数量成正比。 相反,一个非原生图数据库引擎使用(全局)索引连接各个节点。这些索引对每个遍历都添加一个间接层,因此会导致更大的计算成本。原生图处理的拥护者认为免索引邻接至关重要,因为它提供快速、高效的图遍历。 索引查找在小型网络中可以工作,但对于大图的查询代价太高。具有原生图处理能力的图数据库在查询时不是使用索引查找来扮演联系的角色,而是使用免索引邻接来确保高性能遍历的。

发布了114 篇原创文章 · 获赞 18 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/WangYouJin321/article/details/103969137