哲学与信息时代

图数据库和Neo4j - 关系是第一生产力的兴起

2019-07-31  本文已影响0人  李穆

1. 介绍

1.1 图数据库

功能

图数据库是一个主要表示联系和对联系进行操作的数据库。
与普通数据库相比,图数据库更关注联系,并试图从联系中找到有用信息。

维克托·迈尔·舍恩伯格在《大数据时代》一书中这样写道:“我们没有必要非得知道现象背后的原因,而是要让数据自己发声。”
以及“相关关系能够帮助我们更好地了解这个世界。”他认为,建立在相关关系分析法上面的预测是大数据的核心。
在书中提出的“大数据三原则”:要全体不要抽样,要效率不要绝对精确,要相关不要因果。
-- 或许这些表示联系在大数据时代的重要性,而图数据库正是存储和表示联系的好帮手。

neo4j是一种NoSQL, 下面是各种NoSQL特性对比:

分类 数据模型 优势 劣势 举例
键值数据库 哈希表 查找速度快 数据无结构化,通常只被当作字符串或者二进制数据 Redis
列存储数据库 列式数据存储 查找速度快;支持分布横向扩展;数据压缩率高 功能相对受限 HBase
文档型数据库 键值对扩展 数据结构要求不严格;表结构可变;不需要预先定义表结构 查询性能不高,缺乏统一的查询语法 MongoDB
图数据库 节点和关系组成的图 利用图结构相关算法(最短路径、节点度关系查找等) 可能需要对整个图做计算,不利于图数据分布存储 Neo4j、JanusGraph

目前业界应用的主流数据库还是关系型数据库,图数据库相比关系型:

图数据库在处理关联关系上具有完全的优势,特别是在我们这个社交网络得到极大发展的互联网时代。例如我们希望知道谁LIKES(喜欢)谁(喜欢可以是单向或双向),也想知道谁是谁的FRIEND_OF(朋友),谁是所有人的LEADER_OF(领导)。除了在关联查询中尤为明显的优越性,图数据库还有如下优势:

图数据库虽然弥补了很多关系型数据库的缺陷,但还有一些不足地方,如:

不适合记录大量基于事件的数据(例如日志条目);

图模型

目前使用的图模型有3种,分别是属性图(Property Graph)、资源描述框架(RDF)三元组和超图(HyperGraph)。现在较为知名的图数据库主要是基于属性图,更确切得说是带标签的属性图(Labeled-Property Graph),当然标签不是必须的。

是带标签的属性图有如下特征:

图领域

可以分为:

图分析和图查询的区别在于:图分析往往是整张图的操作,而且可能是多次迭代;而图查询只涉及图的一部分,且只需一次。对用户而言最直观的感受是:图分析很慢,图查询很快。

图数据库

是一个使用图结构进行语义查询的数据库,支持对图数据模型的增删改查(CRUD), 在设计时通常考虑了事务完整性和操作可用性。
图数据库将将节点和联系对简单抽象组装为相互关联的结构,使我们能够建造任意复杂的模型。

图数据库有两个技术特性:

对比

与其他类型数据库对比:

优势

1.2 建模

和基于关系的建模方式对比

建模过程类似:

怎么时候使用节点,怎么时候使用联系

建模陷阱

  1. 电子邮件例子
    邮件中收件人、cc、bcc是联系吗?邮件正文存哪里?
    解决方法除了联系人节点外,另外建立一个email节点。

  2. 当有回复或转发时
    回复邮件也是新邮件节点,它与原来的邮件节点有replay联系

  3. 避免反模式
    实体不能建模为联系
    应该使用联系表示实体是如何相连的,及这些联系的性质

2. 安装

这里使用 docker 方式运行:

docker pull neo4j

docker方式运行时相关目录:

运行,并且允许ipv4 https访问(必须设置NEO4J_dbms_connectors_default__listen__address 要不默认是ipv6):

docker run -it --rm -d -p 7473:7473 -p 7687:7687 --env=NEO4J_dbms_connectors_default__listen__address=0.0.0.0 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs --name neo4j neo4j

通过cyper shell执行命令:(auth info: neo4j/neofj)

docker exec -it neo4j bin/cypher-shell

通过web访问(169.254.0.1 is neo4j's host IPv4 address):

https://169.254.0.1:7473/

web 是它的控制界面,在web上面可以执行 cyper shell 指令,可以查看 neo4j 状态
最上面是cyper shell 命令行, 中间是数据库状态,下面是一些常用命令链接:

3. 使用

桌面版的 neo4j只支持一个数据库。 如果想清除当前数据库,在 web 左边有 "Clear local data", 或是执行:

MATCH (n) DETACH DELETE n;

CyperSQL语法:

清除数据库

MATCH (n) DETACH DELETE n;

查询数据库(RETURN)

MATCH (n) RETURN n 

MATCH 表示查询条件
RETURN 表示返回的内容
还可以像 SQL 那样加 WHERE

CREATE

create用于创建节点或是联系,创建时指定名字:标签{属性} 标签可以有多个,之间使用:隔开,每个标签也可以也多个属性,都放在{} 内 联系的名字可以省略,联系的两个节点间有方向

建立节点:

CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

建立节点和边:

CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),

DELETE

用于删除节点或联系

删除联系:

MATCH (:Person {name: "Emil"})-[r:KNOWS]-(:Person {name: "Johan"}) 
DELETE r

删除没有联系的节点:

MATCH (n:Person { name: "Emil" } ) delete n

删除节点和它所有相关的联系:

MATCH (n:Person { name: "Emil" } ) detach delete n

REMOVE

删除节点或联系的属性或标签

SET

向现有节点或联系添加新属性, 或修改属性值

应用

应用例子

社交网络应用

社交是人与人之间的连接,以图数据模型为内在的图数据库天生适用于明显的以联系为中心的领域。在社交网络中使用图数据库可以方便得识别人/群组和他们交流的事物之间的直接或间接的联系,使用户能够高效地对其他人或事物进行打分、评论、发现彼此存在的关系和共同关系的事情。可以更加直观得了解社交网络中人与人之间如何互动、如何关联、如何以群组的形式来做事情或选择。

实时推荐

在零售、招聘、情绪分析、搜索和知识管理领域,社交网络和推荐引擎可以提供关键的差异化能力,有很多种办法可以实现推荐,但使用图数据库在实时性和效率上有其特有的优势。推荐算法在人和事物之间建立联系,而联系建立的基础是用户的行为,比如购买、生产、消费、打分或评论有关资源等行为。推荐引擎可以识别出某些资源会吸引特定个人或群体,或者某些个人或群体可能对特定资源感兴趣。

一个有效的推荐依赖于对事物之间关联的理解,同时也依赖于这些关联的质量和强度,而属性图是所有这些关系密切、关联紧密的数据结构的最佳表达方式。用图数据库存储和查询这些数据使得应用程序可以为最终用户呈现实时结果,反映数据最新的变化,而不是返回给用户那些预计算的状态结果。

地理空间管理

地理空间类的应用程序包括公路网、铁路网等,地理空间操作依赖于特定的数据结构,简单的加权带方向的联系,复杂到空间索引如R树。和索引一样,这些数据结构天生就以图的形式呈现,尤其是层级结构,非常适合图数据库。

总的来说,通信、物流、旅游已经路由计算相关领域的地理空间应用经常会使用图数据库。

主数据管理(Master Data Managerment)

主数据管理(MDM)包括的数据涉及用户、客户、产品、供应商、部门、区域、站点、成本中心和业务单元等。这些数据来源可能是多种多样的,MDM用来识别、清洗、存储和管理这些数据。其关键问题包括谁组织结构的变化、企业合并和业务规则的变化来管理这些变化;融合新的数据源,用外部源数据补充已有的数据;解决报告需求、鉴定需求和商业智能客户的需求;当数据的值和模式变化时对数据进行版本管理。图数据库的数据模型高效匹配MDM的快速演变和不断变化的业务需求。

网络和数据中心管理

图数据库已经成功地使用在了电信、网络管理和分析、云平台管理、数据中心和IT资产管理以及网络影响分析等领域。在这些领域里,他们将影响分析和问题解决的时间时间从数天数小时减少到了分钟级甚至秒级。面对不断变化的网络模式,图数据库的性能和灵活性都是它适合这些领域应用的重要因素。

授权和访问控制

图数据库可以存储那些复杂的、高度关联的、跨越数十亿参与者和资源的访问控制结构。尤其适用于内容管理、联合授权服务、社交网络偏好已经软件服务化提供。将这些系统从关系型数据库切换到图数据库后,性能从分钟级提升到毫秒级。

其他

还广泛用在金融和保险行业反欺诈、风控,电商和社交类产品防机器人作弊等领域。

其他图数据库

JanusGraph源于Titan,最新版本0.3.1于2018年10月发布,基于Apache 2开源协议,是最有前景的开源图数据库,可支持数十亿级别的顶点和边规模,与Neo4J一样也使用Java开发,由IBM主导并提供云服务。

JanusGraph可以为不断增大的数据和用户量提供了弹性和线性的扩展能力,通过数据多点分布和复制来提高性能和容错能力;支持ACID特性和最终一致性。与Neo4J不同,JanusGraph不是原生的图数据库,相反的,其将数据存储到通用的存储系统上,支持的后端存储包括:Apache Cassandra、Apache HBase、Google Cloud Bigtable和Oracle BerkeleyDB。其中BerkeleyDB一般只做例子演示用。

JanusGraph依托于Apache社区构建了完整的图数据库和图计算能力,通过跟Apache中其他组件相配合,提供了一整套完整的图计算生态系统。其中就包括了Apache TinkerPop所提供的图查询语言Gremlin。

上一篇 下一篇

猜你喜欢

热点阅读