ArangoDB Graphs series - 01 primer contacto

Introducción

Un grafo consta de vértices y aristas. En ArangoDB, además de colecciones de vértices, también hay colecciones de aristas, y las aristas se almacenan como documentos en las colecciones de aristas.

Hay dos colecciones en ArangoDB;

> 分别是 edge collection 和 document collection
> 顶点可以是document collection中的document,或者是edge collection的document,因此边可以用作顶点
复制代码

¿Que es el dibujo?

En el mundo SQL, para una relación n:m (muchos a muchos), generalmente se establece una tabla separada para la relación , conectando así las dos tablas de datos correspondientes. edge collectionSimilar a este concepto en ArangoDB , vertex collectiono colección de documentos, similar a la tabla de datos en SQL, que almacena los datos que desea vincular.

En SQL, desea consultar a los amigos de los amigos de Xiao Wang . Aunque se puede lograr a través de múltiples uniones, en la figura, esto solo significa que a partir del punto de Xiao Wang, se realizan dos saltos (hops). gráfico transversal (gráfico transversal).

En un gráfico dirigido, los bordes son direccionales, vertex collectionde , _from y  la _todirección se representa mediante y . Al escribir una consulta, puede especificar la dirección del borde, como OUTBOUND_from →  _to

INBOUND_from ←  _to

ANY_from ↔ _to

¿Qué algoritmos gráficos admite ArangoDB?

Gráfico transversal

  • Filos transversales en salida, entrada o en cualquier dirección
  • Recorrido dentro del rango de profundidad especificado (profundidad transversal)
  • Primero en profundidad, primero en ancho, transversal ponderado
  • Compatible con las condiciones de poda

trayectoria más corta

Por ejemplo, cuando usamos AutoNavi y la navegación de mapas de Baidu, el camino más corto entre dos puntos

k caminos más cortos

k caminos

Distributed Iterative Graph Processing (Pregel)

  • Page Rank
  • Seeded Page Rank
  • Single-Source Shortest Path (SSSP)
  • Connected Components
  • Weakly Connected Components(WCC)
  • Strongly Connected Components (SCC)
  • Hyperlink-Induced Topic Search (HITS)
  • Effective Closeness Vertex Centrality
  • LineRank Vertex Centrality
  • Label Propagation Community Detection
  • Speaker-Listener Label Propagation (SLPA) Community Detection
  • Programmable Pregel Algorithms (experimental)

命名图和匿名图

命名图(Named Graphs)完全由ArangoDB来管理,可以在web界面中看到,拥有ArangoDB中全部的图特性,在ArangoDB中,通过叫graph module的层来提供以下保证:

  • 所有修改都是事务性的
  • 如果删除一个顶点,所有相邻的边也被删除
  • 如果插入一条边,则会检查该边是否与边的定义匹配

如果你没有通过graph module来访问对应的collections,则以上的所有保证都将失去,这时候,你的操作可能会导致数据不一致,在图中表现为悬空边(dangling edges)之类的问题。

匿名图(Anonymous Graphs),没有相应的边定义来描述哪个vertex collection由哪个 edge collection来连接。

该选择哪种图呢?

如上所述,命名图在插入或删除边或顶点时确保图的完整性。因此,即使你在多个命名图中使用相同的vertex collection,也不会遇到悬空边。但这涉及到数据库内部的更多操作,这些操作都是有代价的。

因此,匿名图可能更快。 因此这个问题是一种权衡,性能和完整性之间找到一个平衡点。

如何确定点和边

在建立图时,首先会面临一个问题,我的数据中哪些应该作为图中的点,哪些是边? 有一个能帮助思考的方法是:首先用简短的句子描述业务场景,其中的名词可以当做点,动词当做边。

比如说我们有用户和其所属组织的数据,那么一个业务场景就是: 查询某个用户(名词)属于(动词)哪些组织(名词)呢?

因此我们可以确定两类型顶点 Users 和 Groups,在ArangoDB中可以使用两个不同的 vertex collections来保存, Groups collection中可以存储组织的一些属性,比如组织的名称、成立日期,组织的URL等;同理,Users collection中可以存储用户的姓名、生日、性别等属性。

用户和组织之间的所属关系,我们可以用边来联系,逻辑上,二者之间是多对多(m:n)的关系,如果是在SQL中,我们会建立一个单独的关系表用外键来存储对应关系;在ArangoDB图数据库中,我们会使用一个edge collection,比如叫做UsersInGroups的collection来存储从属关系,例如其中一条边可以是:_from指向Users/John,_to指向Groups/BowlingGroupHappyPin,形成的关系如下图所示。

image.png

同样也可以为该关系添加属性,比如从何时起加入的该组织(e.g., since: 2022-4-12),组织中担任的角色(role: member)

相较于RDBMS中的存储方式,使用图可以更直观的看到不同实体之间的关系,更利于对数据进行深入分析并建模。尤其是当涉及到多跳(hops)的场景时,图的优势更明显。

备份还原

可以使用arangodump备份,使用arangorestore将备份还原到一个新的ArangoDB。

需要注意两点:

  • 若要备份命名图,需使用system collection _graphs
  • 需要备份图包含的完整边和点,部分备份还原可能无法工作

图示例

ArangoDB自带了一些示例,帮助理解图及其APIs, 本文只列举其中的几个示例。

Knows_Graph

image.png

该示例中,只有一种节点(persons)和一种关系(KNOWS),5个人之间的关系如图所示,箭头的方向代表关系(KNOWS)的方向

  • Alice knows Bob
  • Bob knows Charlie
  • Bob knows Dave
  • Eve knows Alice
  • Eve knows Bob

Social Graph

image.png

该图中有两类节点,分别是 female and male,人之间的关系存储在 relation collection中

City Graph

image.png

参考

[1]www.arangodb.com/docs/stable…)

Supongo que te gusta

Origin juejin.im/post/7085597995697176613
Recomendado
Clasificación