这是小小本周的第四篇,这篇将会介绍一款数据库。不同于关系型数据库的数据库。
今日打卡
小小待在北京,北京于近日下雨了。不过还好,小小情绪稳定,生活继续。
介绍
今日出场的是图数据库,图数据库的使用领域主要有
社交领域: 用来管理社交关系,实现好友推荐。
零售领域: 实现商品实时推荐,给买家更好的购物体验。
金融领域: 用来做风控处理。
汽车制造领域: 用来推动制造解决方案。
电信领域: 用来管理网络,控制访问并支持客户。
酒店领域: 用来管理复杂且快速变化的库存。
图数据库
图
图由两个元素组成,分别为节点和关系。每个节点代表一个实体,每个关系代表两个节点的关联方式,通过这种方式,可以实现对各种场景的建模,
图数据库
图数据库是指以图的这种数据结构进行存储和查询数据。
图数据库是一种在线的数据库管理系统,具有处理图形数据建模的创建,读取更新和删除操作。
图数据库最重要的是关系,其应用程序不需要使用外键处理数据库连接。
关系型数据库和NoSql相比,更简单。
重要属性
图数据库有两个关键的属性,分别为图存储和图处理引擎
图存储
一些图数据库使用原声图保存,这类保存是经过优化,经过专门的的为了保存和管理图设计,并不是所有的图数据库都使用原声保存,也有一部分是虚拟化,然后保存在数据库中。
这类比较著名的是Neo3J
图处理引擎
原生图处理,是处理图数据的最有效方法,连接的节点都在数据库中物理的指向。
与NoSql对比
与关系型数据库对比
一个例子,一个数据库中有几张用户,订单,商品表,关系如下
当要查询,用户购买了哪些商品,或者改商品有哪些客户购买过,需要开发人员join。
而图数据库可以相当简单的实现查询该产品的客户还购买了哪些商品。
关系查询性能对比
Neo4J
Neo4J是由Java实现的开源图数据库。自2003年开始开发,直到2007年正式发布第一版,并托管于GitHub上。
Neo4J支持ACID,集群、备份和故障转移。目前Neo4J最新版本为3.5,分为社区版和企业版,社区版只支持单机部署,功能受限。企业版支持主从复制和读写分离,包含可视化管理工具。
JanusGraph
JanusGraph是一个Linux基金会下开源的分布式图数据库。
JanusGraph支持多种存储后端,支持多种可以使用的技术,通用的Apache,通过与大数据平台可以联合使用,通过外部索引可以直接查询。
标记属性图模型
节点
- 节点是主要的数据元素
- 节点通过关系连接到其他节点。
- 节点可以具有一个或多个属性,
- 节点有一个或多个标签,用于描述其在图表中的作用。
关系
- 关系连接两个节点。
- 关系具有方向。
- 节点直接可以有递归关系。
- 关系可以有一个或多个属性。
属性
- 属性是命名值,其中名称是字符串。
- 属性可以被索引和约束。
- 可以重多个属性创建符合索引。
标签
- 标签用于把节点分组。
- 一个节点可以具有多个标签。
- 对标签可以进行索引加速在图中查找节点
- 本机标签针对速度进行优化。
查询语言 Cypher
MATCH
(person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
(foaf:Person)
WHERE
person.name = "Joe"
AND NOT (person)-[:KNOWS]-(foaf)
RETURN
foaf
Joe认识Bob,和sally,这是一度好友,sally认识anna这是二度好友,所以anna为joe的二度好友。
小小
你若不笑,我将会深情的等待,你若笑了,我也将会笑,我是小小,在这等你,我们下期再见。