图数据库学习笔记(一)

图(Graph)

图论(Graph theory)

数据库(Database)

● 节点,即前面提到的对象或实体:数学中通常称为顶点(vertices),而在本书或图数据库中,比如Neo4j,通常称为节点(nodes)。

● 节点之间的连接:数学中称为边(edges),而本书中称为关系(relationships)。

● 节点和关系相互连接构成一个图:许多重要的度量指标,例如连接到一个节点的边数(称之为度)就可以确定下来。许多其他度量指标也就自然形成。

● Dijkstra算法:这是一个最有名的算法,可用于计算图中两个节点之间的最短加权路径,图中边上可赋予权重或成本。

● A*(A-star)算法:Dijkstra算法的一个变种,使用启发式来更有效地预测最短路径搜索。当A*算法发现潜在的图路径时,将其保存到一个带排序的优先队列中作为备选路径段,并计算出路径搜索过程中不同参数条件下过去路径(past path)和将来路径(futurepath)可能的开销。

● PageRank算法

大多数NoSQL数据库的基本理念是面向任务(task-oriented)的数据库管理系统。

除SQL数据库外,其他的可以分成四类:

● 键值存储(key-value stores):键值存储的产品还有DynamoDB、Riak、Project Voldemort、Redis、Aerospike等。

● 列式存储(column-family stores):如Apache Cassandra和HBase。大多数情况下,这些系统可结合Map/Reduce批处理来处理高级查询

● 文档存储(document stores):文档存储中的关键概念——文档,是一个半结构化的信息单元,可以是XML、JSON、YAML、OpenOffice、MS Office,或者其他任何可用的文档。其存储和检索为简单的无模式方式。文档存储产品包括广受欢迎的MongoDB、Apache CouchDB、MarkLogic和Virtuoso等。

● 图数据库(graph databases):通常也归为NoSQL数据库,但与其他三类有着本质上的差异。图数据库所要解决的问题与图和图论相关。图数据库,例如Neo4j,其目的是为用户提供一种更好的方法用于管理结构复杂、呈网状分布的数据。

节点标签(Label)是对图中节点进行语义分类的一种方法。一个节点可以拥有零个、一个或多个标签,其使用方式类似于Gmail收件箱中的标签。在图结构中,标签本质上是一个集合概念:允许在数据库中轻松有效地创建子图,这有很多用途,比如仅查询部分数据库内容。最重要的是,可以使用标签在数据库中直接创建某种类型结构或模式,而不用自己去实现(在Neo4j 2.0之前版本需要自行实现)。带有一个标签的节点可对应于关系数据库表中的一行,而有多个标签的节点就没有与之对应的。虽然没有强制,但节点应该至少有一个标签。

关系类型(Type)功能上与节点标签相似,只是仅用在关系上,但目的完全不同。关系类型是关系上的强制性属性(每个关系必须有且仅有一个类型,但两个节点之间可以有多个关系),主要用于图的复杂深度遍历,一个特定的查询需指定一个节点到另一个节点的特定路径类型。

使用图数据库的场景:

1、复杂查询

复杂查询本质上包含大量的复杂连接操作(join operations)。

2、实时数据的点击流查询

3、路径查询

   查找不同数据元素之间是如何相互关联的。换句话说,就是在图中不同节点之间查找路径。在其他数据库管理系统中,这类查询问题需要清楚地了解可能路径的结构,也就是说,必须告诉数据库如何从一个表跳到另一个表。而在图数据库中,通常不需要这样做,虽然还可以采用上述方法,只需告诉数据库采用何种图算法、起始节点和终止节点,系统就将自动完成查询。图数据库自行判定数据是否连接以及如何连接,并采用路径表达式返回结果。

原文地址:https://www.cnblogs.com/cocoxu1992/p/12738463.html