首页 > 编程知识 正文

Neo4j是一种图存储数据库技术,图数据库neo4j应用场景

时间:2023-05-06 13:31:13 阅读:181402 作者:2340

我最近在捕获社交网站的数据。 捕获的数据将保存在MySql中。 当我问为什么使用MySql时,那当然很容易入门,我只熟悉MySql。 但随着数据量的增长,社会关系存储问题始终困扰着我。

以新浪微博为例,大v少则十几万,多则几千万的粉丝,如何保存这些关注关系呢? 在MySql中,一条关注关系(大V id,大V的一个粉丝 id)存为一条数据中,当用户数上升时,关注关系会轻易破亿、破十亿、甚至达到百亿。 此外,为了保证每个数据的唯一性,必须设置合并索引,MySql稍微有些力不从心。 那么,有人说。 “是分表啊。 嗯,是的。 附表确实可以在插入端和读取端稍微加快速度。比如我们可以根据id哈希到100张表中。查询一个用户有哪些粉丝是快了,但是查询一个用户关注了哪些人时仍然需要遍历全表。是的,此时我们还可以(以id,其关注的一个用户的id)再构造100张表,于是两种查询都快了。但是后面100张表是冗余数据,看了会不舒服…而且生成一张子图也不方便。 (需要多次写SQL查找表。

于是,在搜索更好的方案的时候不小心找到了图形数据库,查了一下资料,感觉确实是个好选择。 果然twitter、Adobe等行业的大人物也在使用。

那么,什么是图形数据库呢? 在这里贴上比较官方的定义。 adatabasethatusesgraphstructuresforsemanticquerieswithnodes,edgesandpropertiestorepresentandstoredataindependendentofthewayta

进入今天的主题,以Neo4j为例,说明为什么选择图形数据库。

首先,我简单介绍一下Neo4j。这里只是说数据模型是图结构的,没有说数据的存储也一定要是图结构的。其数据模型如下图更多内容可浏览官网。 作为图形数据库,Neo4j具有以下优点:

加快数据库操作。 当然,前提条件是数据量很大,需要很多表才能存储在MySql中,而且表之间有很多联系(即需要join表的操作不少)。 数据变得直观,对应的SQL语句也变得容易写。 (Neo4j使用Cypher语言,与传统的SQL有很大不同。 更灵活。 在Neo4j是由Java和Scala写成的一个NoSql数据库,专门用于网络图的存储。MySql中意味着新表,还必须考虑与其他表的关系。 数据库操作的速度并不会随着数据库的增大而大幅降低。 这要归功于Neo4j特殊的数据存储结构和专门优化的图形算法。 接下来,我们从更深的层面来看图形数据库。 从Neo4j的数据存储和数据读写两个方面来说明为什么选择它。

数据存储

Neo4j特别针对图的存储进行了优化。 这不像传统的数据库那样是记录单个数据的保存方法。 http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /如下图:

读写数据

不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性此外,根据公式,在Neo4j中,边缘是最重要的“第一类实体”,因此单独存储有利于在移植遍历时提高速度

更多资料可以看到参考资料的第一条。

关于为什么选择图形数据库,我来说这个。 现在可以选择的图形数据库也不少,为什么选择Neo4j呢? 简单地说,有以下几点。

作为一种古老的图形数据库,文档和各种技术博客较多。 最初尝试过Neo4j的存储方式是:,据说操作简单轻便。 但是输了安装过程…,依赖太多了。 网上经常有人比较节点的类别,属性,边的类别,属性j,我当然也想到过orientdb和arangodb。 从易用性来说也是一样的。 在速度上我看到过一些评估,但是arangodb使用的是混合索引,所以应该比较快。 但是,在稳定性方面,neo4j是最好的。 由于时间有限,我没有通读Neo4j的官方文档。 但是,作为数据库使用者,大致了解一下为什么要选择这个数据库就足够了。

最后总结一下吧。 图形数据库是这几年兴起的,总体上还不够,适用面也很窄。 只有在明确了自己的需求之后,才能决定是否选择图形数据库。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。