ArangoDB多模态数据库的介绍和分享

ArangoDB是一款储存文档、图形并提供查询的多模型数据库,支持键值对、文档和图形模式的数据储存。在这片文章里,我会着重对图数据方面的信息进行分析和介绍。如果对基础功能的使用还有疑问的小伙伴,可以自行去官网进行资料的查阅。迷路的小伙伴可以->点击这里

本文使用的arangoDB主要版本为3.6,但是会介绍一些3.7版本便于使用的功能,其中3.7的功能均在beta版中进行了测试(目前官方还没有推出3.7的正式版),等正式版出了会在进行更新和整理。3.7的功能部分仅供参考。

一、基本概念

首先,在接触ArangoDB的时候,你需要了解这个数据库的一些基本划分和概念
AQL:arangodb的查询语言,可与类似于SQL。
Collections:分成Docunment和Edge两种类型,分别储存文档和边的信息
Document:可以储存一条记录,每一条类似于一个neo4j的节点
Edge:可以储存一条记录,与document不同,edge储存的是节点之间的关系(带有_from和_to)
graph:根据指定的一个或多个document和edge进行结合,组成一个graph
View:视图、对collections中的文档建立视图,已用来提供arangosearch的查询

二、基本功能(CRUD)

2.1 新增

insert的使用

在指定数据库中新增一条数据(可以是节点或者关系,根据新增的内容不同填充必要的字段,这里以节点为例)

INSERT { “_key”: “1”, “_id”: “test/1”, “name”: “test1”, “id”: “9f8a12152a844671aa9c9c7021303fcc”, “sample”: “弦酿坭苛忒蜩铬难怩遇汗昂浩筷烯母浑伫娠甄咀展郏帘岣晾拐捂妊幢胫镝蟓酉杓圻藤缱哑守陕锸焖桑狂写驹漾黯”, “time”: “2020-02-24 16:40:30” } INTO test

新增之后,我们可以看到这样一条数据

其中,_key为数据文档中这一条数据的键,不指定的话会默认生成一个,而_id则为表名和key的结合,_rev为系统管理的版本(revision id)。

2.2 修改

update的使用

update “1” with { “name”: “updateTest” } in test

replace的使用

replace “1” with{ “_key”: “1”, “_id”: “test/1”, “name”: “replaceTest”, “id”: “9f8a12152a844671aa9c9c7021303fcc”, “sample”: “弦酿坭苛忒蜩铬难怩遇汗昂浩筷烯母浑伫娠甄咀展郏帘岣晾拐捂妊幢胫镝蟓酉杓圻藤缱哑守陕锸焖桑狂写驹漾黯” } in test


用replace字段的话会将原来的数据删除掉,将新的填充进去,而不是只替换输入的参数

2.3 删除

remove的使用

REMOVE “1” IN test

根据key对文档中相应的一条数据进行删除

2.4 查询

根据id在文档内进行记录查找

return document (“test”, “1”)

2.5 for语句

用for语句对文档内的所有文档进行遍历查询

for node in test return node

2.6 limit的使用

for node in test limit 1 return node

limit关键词要放在return前面

2.7 filter的使用

filter作为aql语句中的筛选条件,和sql相同,放在句中,如:

for node in test filter node.name == “replaceTest” return node

当查询一条记录(一个节点)的时候,可以有一个或者多个筛选条件,这是可以用多个filter进行过滤,如:

for node in test filter node.name == “replaceTest” filter node.id =~ “1” return node

或者也可以根据需要用and、or进行连接,如:

for node in test filter node.name == “replaceTest” and node.id =~ “1” return node

2.8 Collection的使用

2.8.1 用于计数

在数据库的使用中,最常见的一个操作就是count了,那么在arangodb中怎么针对查询出来的结果进行计数呢

for node in test collection with count into number return number

如果需要对文档进行过滤则可以将filter拼接进去

三、图查询介绍

图查询是建立在collections中的节点文档(document)和关系文档(edge),一个图可以包含一个或多个节点文档和关系文档的组合。每一组关系文档需要声明起始节点所在文档和结束节点所在文档

3.1 基本图查询

for v in 1..1 any “baiwan/1” graph “baiwantest” return v

语句中1…1是指根据节点查询周边一层
baiwan/1是指其实节点的key为“baiwan/1”
any是指根据节点进行双向查询,如果单项查询可以根据需求使用outbound和inbound。
baiwantest为图名称
改语句的返回值为改节点周边一层的所有节点信息

同理,图查询的时候也可以添加filter作为过滤的条件,如

 for v in 1..1 any “baiwan/1” graph “baiwantest” filter v.name == “test759036” return v

3.2 图查询语句属性介绍

图查询时可以通过 for v,e,p 的方式指定返回结果,v代表了节点数据,e代表了边数据,p代表了整个路径((v)-[e]-(v))。

3.3 图查询中的with使用

可以指定节点的结合列表,放在语句的最开头, 如:

[WITH vertexCollection1[, vertexCollection2[, ...vertexCollectionN]]]
FOR v,e,p ......

3.4 图查询中的collections的使用

在查询图结构时。可以使用collection对变量进行赋值返回,并且根据需要可以进行分组统计等操作

for e in event
for node1,relation1,path1 in 1..1 any e graph 'graph'
filter '新闻' in node1.labels
for node2,relation2,path2 in 1..1 any node1 graph 'graph'
filter '评论' in node2.labels
collect event = e,news = node1 with count into number
sort number desc
return {'event':event, 'news':news, 'number': number}

3.5 图语句查询参数配置(options)

3.5.1 bfs

是否使用宽度优先遍历算法

  • true: 宽度遍历优先
  • false:深度遍历优先

3.5.2 uniqueVertices

认定遍历时节点唯一性

  • “None”: 不做任何限制。(默认)
    针对于超级节点会经常导致内存溢出的情况,arangodb在图查询中没有做任何的去重操作。会有很多很多很多很多很多很多很多很多重复和无效操作。

  • “path”: 所有遍历的路径中没有重复的节点。
    个人理解像针对于路径的去重,但是对于最终返回的结果如果有多条路径的话还是会有重复的情况,比如在如下图形关系中:
    如果指定了path属性的话, 结果会返回两条路径:a->b->d 和 a->c->d

-“global”: 在遍历的过程中每个节点只保证遍历一次。如果使用了这个参数,在查询的时候有些路径可能会丢失,所以应该在只对结束节点有查询要求时使用该参数。如上图所示,如果使用改参数则只会返回a->b->d路径。
使用该方法的有点是针对于超级节点的多层图查询,可以极大的减小程序运行内存的压力,因为这个去重工作是在将数据放入内存前进行的,所以如上图,只有a->b->d数据会保存在内存中

3.5.3 uniqueEdges

  • “Path”: 每个边只会遍历一遍。(默认)
  • “None”: 不做任何限制。(不要用,可能会导致边的循环:转圈圈~)

以下功能在3.7以上才可以使用

3.5.4 edgeCollections

  • 指定参与的边缘文档集合

3.5.5 vertexCollections

  • 指定参与的节点文档集合

3.5.6 parallelism

  • 并发设置: 如果省略或设置为1,遍历执行就不会并行化。如果设置为大于1的值,那么可以使用最多的工作线程并发地执行遍历。这个值的上限是目标机器上可用内核的数量。

今天的arangodb总结就先到这里,下一篇博主大大会准备一些对于数据库配置参数方面的介绍和推荐。引用转发请记得带连接哦。

ArangoDB基础介绍相关推荐

  1. day23:shell基础介绍 alias及重定向

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都 ...

  2. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

  3. python介绍和用途-Python基础介绍(一)

    Python基础介绍(一) 1. python是什么编程语言 编译型与解释型 ​编译器吧源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以极其语言来运行此程序,速度很快 ...

  4. STL体系结构与内核分析-2-STL体系结构基础介绍(侯捷)--笔记

    STL体系结构与内核分析(侯捷) 2.STL体系结构基础介绍 STL设计方式与OO(面向对象)不同的地方,OO鼓励数据和处理数据的方法都放在类里,而STL的数据在容器里,操作数据的方法在其他部件里(模 ...

  5. ai一个线段多个箭头_初学设计却分不清PS和AI?超详细的AI基础介绍包你一看即会!...

    以前提到AI,第一个想到的就是人工智能.自从扎进设计的神坑,再提到AI,我可只认软件了~ 包括小ke在内的很多设计小伙伴在最开始入行的时候都认为,只要学好PS就可以稳打设计圈了~毕竟那么多公号一提到设 ...

  6. 深度学习与计算机视觉系列(1)_基础介绍

    转载自: 深度学习与计算机视觉系列(1)_基础介绍 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/detail ...

  7. 【学习笔记】Tableau基础介绍

    Tableau基础介绍 [简介] Tableau是一家提供商业智能的软件公司,正式成立于2004年,总部位于美国华盛顿西雅图. 源自美国国防部的一个项目需求,在斯坦福博士克里斯·斯图尔特和Pixar创 ...

  8. python最基本的规则是什么_Python基础介绍(一)

    Python基础介绍(一) 1. python是什么编程语言 编译型与解释型 ​编译器吧源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以极其语言来运行此程序,速度很快 ...

  9. 监控工具—Prometheus—基础介绍

    原文作者:IT有意思 原文地址:Prometheus(普罗米修斯)--适合k8s和docker的监控系统 目录 1.介绍 2.监控原理 3.监控指标 4.系统架构 5.功能用途 6.面临挑战 1.介绍 ...

最新文章

  1. 下一版本Windowsreg; CE 开发工具Smart Device Extensions for Microsoft Visual Studioreg; .NET...
  2. buu Windows系统密码
  3. leetcode1491. 工资平均值 这也叫题?也太简单了吧
  4. 20165313 课程总结
  5. 客户服务器网络系统的优缺点,浅析网络存储方案的三种类型及其优缺点
  6. halcon 导出数据集_HALCON中级篇:Blob分析
  7. Tomcat9百度云下载
  8. 矩阵分析之 实矩阵分解(3)Cholesky分解
  9. js刷新页面的几种方式与区别
  10. ad10搜索快捷键_AD中常用的快捷方式
  11. 包饺子、看表演、逛庙会 中外居民北京“过大年”
  12. 深度学习基础 - 概率的三个公理
  13. 事务四大特征:原子性,一致性,隔离性和持久性(ACID)
  14. 详解java人力外包的费用组成
  15. Android开发,实现摇一摇功能
  16. Python爬虫---爬取数据(上)
  17. 华三模拟器HCL下载与安装教程
  18. vps虚拟服务器主机,vps虚拟服务器主机
  19. 云服务器怎么维护运营
  20. 直线模组常用的驱动模式有哪些?

热门文章

  1. 【算法系列 三】 Quene
  2. 国外ERP品牌要凉凉?
  3. irq_request()
  4. Docker常见命令(以备不时之需)
  5. 笔记本能搜到别人家的WiFi ,却搜不到近在咫尺的自家的
  6. 路灯发光二极管的选择
  7. 中亦科技将二度上会:八成收入来自金融,研发、销售投入有待平衡
  8. 水性聚氨酯树脂的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. jquery选择器引擎Sizzle
  10. IB纪录(十九):At the heard of the image