阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

什么选择图形数据库,为什么选择Neo4j?

159次阅读
没有评论

共计 2394 个字符,预计需要花费 6 分钟才能阅读完成。

最近在抓取一些社交网站的数据,抓下来的数据用 MySql 存储。问我为什么用 MySql,那自然是入门简单,并且我当时只熟悉 MySql。可是,随着数据量越来越大,有一个问题始终困扰着我,那就是 社交关系的存储

就以新浪微博举例,一个大 V 少则十几万,多则几千万的粉丝,这些关注关系要怎么存呢?在 MySql 中,一条关注关系(大 V id,大 V 的一个粉丝 id)存为一条数据,那么当用户数量上来的时候,关注关系轻松破亿,破十亿,甚至上百亿,并且为了保证每条数据的唯一性,还需要设置联合索引,MySql 就有些力不从心了。那么有人要说了:分表呀。嗯,没错,分表的确可以在插入端和读取端提升一些速度。比如我们可以根据 id 哈希到 100 张表中。查询一个用户有哪些粉丝是快了,但是查询一个用户关注了哪些人时仍然需要遍历全表。好,这时候我们还可以以(id,其关注的一个用户的 id)再构造 100 张表,于是两种查询都快了。然而,后面那 100 张表是冗余数据,看着就不爽 … 并且生成一张子图也不方便(需要多次写 SQL 查表)。

于是,在搜索更好的方案时无意间发现了图形数据库,查阅一番资料后感觉确实是个不错的选择,毕竟业界的一些大佬,如 twitter,Adobe 等也在用。

那么,什么是图形数据库呢 ?在这里我贴上较为官方的定义: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?


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

首先,先简要介绍一下 Neo4j。Neo4j 是由 Java 和 Scala 写成的一个 NoSql 数据库,专门用于网络图的存储。更详细的内容可见官网。作为一个图形数据库,Neo4j 有以下优点:

  • 更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在 MySql 中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要 join 表)。
  • 数据更直观,相应的 SQL 语句也更好写(Neo4j 使用 Cypher 语言,与传统 SQL 有很大不同)。
  • 更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而 MySql 中即意味着新的表,还要考虑和其他表的关系。
  • 数据库操作的速度并不会随着数据库的增大有明显的降低。这得益于 Neo4j 特殊的数据存储结构和专门优化的图算法。

接着,试着从更深一些的层次看图形数据库。我将从 Neo4j 的数据存储和数据读写两方面来说明为什么选它。

  1. 数据存储
    Neo4j 对于图的存储自然是经过特别优化的。不像传统数据库的一条记录一条数据的存储方式,Neo4j 的存储方式是:节点的类别,属性,边的类别,属性等都是分开存储的,这将大大有助于提高图形数据库的性能。如下图:什么选择图形数据库,为什么选择 Neo4j?

  2. 数据读写
    在 Neo4j 中,存储节点时使用了 ”index-free adjacency”,即每个节点都有指向其邻居节点的指针,可以让我们在 O(1)  O(1) 的时间内找到邻居节点。另外,按照官方的说法,在 Neo4j 中边是最重要的, 是 ”first-class entities”,所以单独存储,这有利于在图遍历的时候提高速度,也可以很方便地以任何方向进行遍历。什么选择图形数据库,为什么选择 Neo4j?

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


关于为什么选图形数据库就说到这。如今可供选择的图形数据库也不少,为什么就选择了 Neo4j 呢?我简要归结为以下几点:

  • 作为较早的一批图形数据库之一,文档和各种技术博客较多。
  • 最开始曾尝试过 flockdb(据说操作简单 + 轻量级),但是败于安装过程 …,依赖太多。
  • 网上经常有人将 orientdb,arangodb 与 neo4j 做对比,我当然也考虑过 orientdb 和 arangodb。从易用性来说都差不多。速度上的话看过一些评测,arangodb 应该是相对最快的,因为其使用了混合索引。但是从稳定性来说,neo4j 是最好的。

时间有限,我并没有通读 Neo4j 的官方文档。但作为一个数据库使用者,能大概地了解为什么要选这个数据库就已经足够了。

最后做个总结吧。图形数据库是这几年兴起的,整体还不是很完善,而且适用面也是比较窄的。只有在明确自己的需求之后,才能确定是否选择图形数据库。

Neo4j 的详细介绍:请点这里
Neo4j 的下载地址:请点这里

推荐阅读:

Neo4j 生成测试数据 http://www.linuxidc.com/Linux/2012-05/61466.htm

Neo4j 运行原理 http://www.linuxidc.com/Linux/2012-02/53689.htm

Neo4j High Availability 配置 http://www.linuxidc.com/Linux/2012-02/53688.htm

Neo4J 图数据库实践系列

图数据库实践系列 (一)–Neo4J 简介与安装 http://www.linuxidc.com/Linux/2013-08/88766.htm

图数据库实践系列 (二)–Neo4J 空间数据存储 http://www.linuxidc.com/Linux/2013-08/88767.htm

图数据库实践系列 (三)–Neo4j Spatial 的 REST 集成 http://www.linuxidc.com/Linux/2013-08/88768.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135040.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2394字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中