Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ArangoDB 系列(1) —— 初识 ArnagoDB

ArangoDB 系列(1) —— 初识 ArnagoDB

作者头像
求和小熊猫
发布于 2022-05-07 08:12:37
发布于 2022-05-07 08:12:37
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

初识 ArangoDB

文章目录

前置知识

ArangoDB 的特性

  • 灵活的数据类型,支持键值对、文档和图(用于保存社会关系)
  • 在运行对文档或者集合的查询时,能够有选择保持事务的一致性和隔离性
  • 具备复制与分片功能,能够对数据库进行失败配置,并且可以将大数据集分布在多个服务器
  • 可配置的持久性,可以让应用程序在持久性和性能之间做出选择
  • ArangoDB 能够更加高效的使用现代存储硬件,类似于ssd 和大型缓存
  • 使用 ArangoDB 作为应用服务器,能够融合应用和数据,以适应更大的吞吐量

ArangoDB 的安装与连接

ArangoDB 社区版的下载地址: https://www.arangodb.com/download-major/ 这里我用的是 CentOS7 的操作系统

  • ArangoDB 服务端安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先上传 ArangoDB 的服务端压缩包,并解压
tar -xf arangodb3-linux-3.9.0.tar
# 为 ArangoDB 配置环境变量
vi /etc/profile
# Ps: 这里我将压缩包解压在了 /root/temp 目录下,用户可以根据自己的解压目录自行更改
#====== 在文件末尾追加 ======
export ARANGO_HOME=/root/temp/arangodb3-linux-3.9.0
export PATH=$PATH:$ARANGO_HOME/bin
#======================
# 使环境变量生效
source /etc/profile
# 查看 ArangoDB 版本查看是否配置成功
arangodb --version
  • ArangoDB 的启动
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 单节点启动命令
arangodb --starter.mode single --starter.data-dir /tmp/mydata
# 激活 failover 启动
arangodb --starter.mode activefailover --starter.data-dir /tmp/mydata
# 集群模式启动
arangodb --starter.mode cluster --starter.data-dir /tmp/mydata

Ps: /tmp/mydata 代表的是自定义的数据存储位置

  • ArangoDB 客户端安装与连接
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 上传 ArangoDB 的客户端压缩包,然后解压
tar -xf arangodb3-client-linux-3.9.0.tar
# 进入 ArangoDB 客户端目录
 cd arangodb3-client-linux-3.9.0/bin/
# 连接 ArangoDB 数据库(无验证模式)
./arangosh --server.authentication false --server.endpoint tcp://192.168.159.139:8529
# 连接 ArangoDB 数据库(开启验证情况下)
./arangosh --server.username usr --server.password password --server.endpoint tcp://192.168.159.139:8529

Ps:

  1. ArangoDB 在客户端压缩包里的 bin/ 目录下的所有可执行文件在服务端的压缩包中全部存在,如果是本地服务端安装的话,且已经配备了 ArangoDB 环境变量,则可以直接使用 arangosh 命令,无需安装 ArangoDB 客户端。
  2. ArangoDB 的默认连接端口8259
  • 可视化界面

直接在浏览器里输入 http://192.168.159.139:8529/_db/_system/_admin/aardvark/index.html#collections 就可以看到 ArangoDB 的可视化界面

ArangoDB 的操作

ArangoDB 的管理操作命令

数据库管理命令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建数据库
db._createDatabase(database-name)
# 展示所有的数据库
db._databases()
# 使用数据库
db._useDatabase(database-name)
# 删除数据库
db._dropDatabase(database-name)
集合管理命令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建集合
db._create("Characters")
# 创建边的集合
db._createEdgeCollection("Relations")
# 获取集合 Characters 的信息(可用于获取集合)
db._collection("Characters")
# 获取集合 Characters 的信息(可用于获取集合)
db.Characters
# 列出所有的集合
db._collections()
# 删除集合内所有数据(不删除索引)
db._truncate("Characters")
# 删除集合(连带删除索引)
db._drop("Characters")
集合相关方法

使用 db.Characters.properties()db._collection("Characters").properties() 两种方式以直接调用相关方法,接下来主要以db._Collection("Characters") 方式为主。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看集合属性
db._collection("Characters").properties()
# 更改集合属性
db._collection("Characters").properties({ waitForSync : true })
# 重命名集合
db._collection("Characters").rename("Vertex")
# 获取集合统计信息
db._collection("Characters").figures()
# 获取集合的详细统计信息
db._collection("Characters").figures(true)
# 将集合数据加载到内存中
db._collection("Characters").load()
# 存入一个数据
 db._collection("Characters").save({"name":"张飞"})
 # 插入一条数据
 db._collection("Characters").insert({"name":"刘备"})
 # 查看集合内有多少个文档
 db._collection("Characters").count()
# 返回集合内任意一个文档
db._collection("Characters").any()
# 列出所有的数据
db._collection("Characters").all().toArray()
# 列出集合中的前两个数据
db._collection("Characters").all().limit(2).toArray()
# 按条件查找数据
db._collection("Characters").byExample({"name":"吕布"}).toArray()
# 按条件更新数据
db._collection("Characters").updateByExample({"name":"吕布"},{"name":"赵云"})
# 按条件删除数据
db._collection("Characters").removeByExample( {"name":"赵云"} )
# 依据 id 删除数据
db._collection("Characters").remove("Characters/22040")
# 按照 key 删除多个数据
db._collection("Characters").removeByKeys(["22052","22046"])
# 清空集合内的所有数据
db._collection("Characters").truncate()
# 删除集合
db._collection("Characters").drop()
图数据库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建顶点集合
db._create("vertex");
# 创建边集合
db._createEdgeCollection("relation");
# 定义图变量
var myGraph = {};
# 插入第一个顶点
myGraph.v1 = db.vertex.insert({ name : "vertex 1" });
# 插入第二个顶点
myGraph.v2 = db.vertex.insert({ name : "vertex 2" });
# 为两个边建立关系(第一个顶点为起点,第二个顶点为重点)
myGraph.e1 = db.relation.insert(myGraph.v1, myGraph.v2,{ label : "knows"});
# 查看边的内容
db._document(myGraph.e1);
# 查看顶点相关的边
db.relation.edges(myGraph.v1._id);
# 查看以某顶点为终点的边
db.relation.inEdges(myGraph.v2._id);
# 查看以某顶点为起点的边
db.relation.inEdges(myGraph.v1._id);
AQL 语句执行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 执行一条 AQL 语句
db._query(query).toArray()
# 带参数的执行 AQL
db._query(
'FOR c IN @@collection FILTER c._key == @key RETURN c._key', 
{ '@collection': 'mycollection',  'key': 'testKey'}).toArray();
# 查看执行计划
db._explain(query, bindParameters)

ArangoDB 的 AQL 语法

插入数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 插入一条记录
INSERT {
    "name": "Ned",
    "surname": "Stark",
    "alive": true,
    "age": 41,
    "traits": ["A","H","C","N","P"]} INTO Characters
-- 插入多条记录
------------------ 先定义变量 ---------------------
LET data = [
    { "name": "Robert", "surname": "Baratheon", "alive": false, "traits": ["A","H","C"] },
    { "name": "Jaime", "surname": "Lannister", "alive": true, "age": 36, "traits": ["A","F","B"] }
]

------------------ 插入多条数据 ------------------
FOR d IN data
    INSERT d INTO Characters
-- 插入边
INSERT { _from: "Characters/robb", _to: "Characters/ned" } INTO ChildOf
  • 插入的数据类型

数据类型

描述

null

空值

boolean

布尔类型变量,可选值为 true 和 false

number

数值类型,可以为整型数值和浮点数型数值

string

字符串类型

array/list

数组或列表类型

object/document

对象类型数据,也可成为文档类型数据,可用于序列化数据

修改语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 依据 id 更新数据
UPDATE "2861650" WITH { alive: false } IN Characters
-- 更新集合内的所有元素
FOR c IN Characters
    UPDATE c WITH { season: 1 } IN Characters
-- 更新整个文档内的内容
REPLACE "2861650" WITH {
    name: "Ned",
    surname: "Stark",
    alive: false,
    age: 41,
    traits: ["A","H","C","N","P"]} IN Characters
删除语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 根据 id 删除文档数据
REMOVE "2861650" IN Characters
-- 删除集合内所有的文档
FOR c IN Characters
    REMOVE c IN Characters
查询语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select --
-- 遍历文档
FOR c IN Characters RETURN c
-- 依据 id 查询文档
RETURN DOCUMENT("Characters/2861650")
-- 依据 id 查询文档
RETURN DOCUMENT("Characters", "2861650")
-- 依据多个 id 查询文档
RETURN DOCUMENT("Characters", ["2861650", "2861653"])
-- 依据多个 id 查询文档
RETURN DOCUMENT(["Characters/2861650", "Characters/2861653"])
-- 查询名称为 Ned  的数据
FOR c IN Characters
    FILTER c.name == "Ned"
    RETURN c
--  查询年龄大于13的数据
FOR c IN Characters
    FILTER c.age >= 13
    RETURN c.name
-- 查询年龄小于 13 的数据并输出指定的属性
FOR c IN Characters
    FILTER c.age < 13
    RETURN { name: c.name, age: c.age }
-- 多条件查询
FOR c IN Characters
    FILTER c.age < 13
    FILTER c.age != null
    RETURN { name: c.name, age: c.age }
-- 也可用 AND 连接多个查询条件
FOR c IN Characters
    FILTER c.age < 13 AND c.age != null
    RETURN { name: c.name, age: c.age }
-- 用 or 连接两个查询条件
FOR c IN Characters
    FILTER c.name == "Jon" OR c.name == "Joffrey"
    RETURN { name: c.name, surname: c.surname }
-- 限制输出5个结果
FOR c IN Characters
    LIMIT 5
    RETURN c.name
-- 输出第3个开始输出后面5个结果
FOR c IN Characters
    LIMIT 2, 5
    RETURN c.name
-- 输出结果依据名称排名
FOR c IN Characters
    SORT c.name
    LIMIT 10
    RETURN c.name
-- 按照名称降序排序
FOR c IN Characters
    SORT c.name DESC
    LIMIT 10
    RETURN c.name
-- 依据多个特性进行排名
FOR c IN Characters
    FILTER c.surname
    SORT c.surname, c.name
    LIMIT 10
    RETURN {
        surname: c.surname,
        name: c.name
    }
图的遍历查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 以名为 Joffery 的顶点为出发点,正向遍历,步长为 1~2步,并输出终点节点的名称
FOR c IN Characters
    FILTER c.name == "Joffrey"
    FOR v IN 1..2 OUTBOUND c ChildOf
        RETURN DISTINCT v.name
-- 以名为 Ned 的顶点为出发点,逆向遍历,步长为 1 步,并输出终点节点的名称
FOR c IN Characters
    FILTER c.name == "Ned"
    FOR v IN 1..1 INBOUND c ChildOf
        RETURN v.name
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ArangoDB文档操作
通过ArangoDB提供的shell终端,我们可以执行很多文档集合操作,下面就看看一些常用的方法。
kongxx
2020/02/18
9260
如何在Ubuntu 14.04上安装和使用ArangoDB
ArangoDB是一个NoSQL数据库。它创建于2011年,当时已有许多NoSQL数据库,其目标是成为一个涵盖各种用例的综合数据库解决方案。
朝朝
2018/09/29
2.8K0
使用Python操作ArangoDB
前面说过怎样使用 ArangoDB 的 Web,Shell 和 Restful API 来操作数据库,今天看一下怎样使用Python语言来操作ArangoDB数据库。
kongxx
2020/02/18
1.5K0
ArangoDB集合操作
通常我们可以通过 ArangoDB 提供的 Web 接口来对 ArangoDB 进行监控和管理。但今天来看看怎样通过 arangosh 的方式来对数据库进行操作。
kongxx
2020/02/18
1.1K0
使用Java驱动操作ArangoDB
前面说过怎样使用 ArangoDB 的 Web,Shell 和 Restful API 来操作数据库,今天看一下怎样使用Java语言来操作ArangoDB数据库。
kongxx
2020/02/18
1.9K0
ArangoDB Restful API
ArangoDB 除了提供 Web 和 shell 接口来管理数据库之外,还可以使用 Restful API 的方式来管理数据库。
kongxx
2020/02/18
1.2K0
OrientDB 系列(1) —— 初识 OrientDB
OrientDB 的下载地址: http://www.orientdb.org/download
求和小熊猫
2022/05/07
1.1K0
OrientDB 系列(1) —— 初识 OrientDB
ArangoDB与SpringData集成
首先访问 https://start.spring.io 创建一个 spring-boot 项目。然后添加如下依赖
kongxx
2020/02/18
1.6K0
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
今天给大家分享一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库:LiteDB。本篇文章主要是介绍LiteDB和在.NET中如何使用。
追逐时光者
2024/01/11
6420
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
Java 实践
/** *宠物就是一个标准,包含多类宠物 *定义宠物标准接口Pet *定义Cat和Dog两个Pet接口的子类 *使用链表结构动态存储宠物信息 *定义商店类(工厂类),负责宠物的上架(链表添加)、下架(链表删除)、查找(模糊查找) * *所有数据类型均为 接口————Pet * * */ class Link { //链表类(外部可调用) class Node { //节点类,定义该内部类,只可服务于Link类
Mirror王宇阳
2020/11/10
4100
初识 MongoDB 和 .NET Core 入门
昨天搭建完毕 MongoDB 集群 后,开始计划了解 MongoDB ,并引入使用场景,这里介绍一下学习过程中的一些笔记,帮助读者快速了解 MongoDB 并使用 C# 对其进行编码。
痴者工良
2021/04/26
1.2K0
在Node中如何操作MongoDB数据库
MongoDB是一款流行的文档型数据库,可以在Node.js中使用官方的MongoDB包或者第三方包mongoose进行操作。
泽霖
2023/11/29
9010
SqlAlchemy 2.0 中文文档(八十一)
本文档描述了 SQLAlchemy 版本 0.3(2007 年 10 月 14 日最后发布)与 SQLAlchemy 版本 0.4(2008 年 10 月 12 日最后发布)之间的变化。
ApacheCN_飞龙
2024/08/26
2160
如何使用 Node.js 连接和操作 MongoDB 数据库?
Node.js 是一种基于 JavaScript 的服务器端编程语言,而 MongoDB 是一个流行的 NoSQL 数据库。Node.js 可以与 MongoDB 集成,从而创建强大的 Web 应用程序。本文将详细介绍如何使用 Node.js 连接和操作 MongoDB 数据库。
网络技术联盟站
2023/07/06
2K0
Nebula Graph 系列(1) —— 初识 Nebula
Nebula Graph 是一个高性能、可线性扩展、开源的分布式图数据库。Nebula Graph 采用 shared-nothing 分布式架构,企业可针对性对业务进行扩缩容。
求和小熊猫
2022/05/07
1.8K0
Nebula Graph 系列(1) —— 初识 Nebula
多数据模型数据库 | 应用实例解析
吕信,京东商城技术架构部资深架构师,拥有多年数据产品研发及架构经验。在京东及国内主导过多种数据产品的开发及社区建设,积极活跃于数据产品领域,对数据库及大数据领域各个产品具有丰富经验,目前在京东商城主导弹性数据库研发及推广使用。
京东技术
2018/09/28
2K0
多数据模型数据库 | 应用实例解析
【翻译】MongoDB指南/CRUD操作(一)
【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档。 CRUD操作包括创建、读取、更新和删除文档。 创建操作 执行创建或者插入操作可向集合中添加文档。如果集合不存在,插入操作会创建此集合。 MongoDB提供下列方法向集合中插入文档: db.collection.insert() db.collection.insertOne()  3.2版本新增 db.collection.insertMany(
甜橙很酸
2018/03/08
5.6K0
【翻译】MongoDB指南/CRUD操作(一)
mongoDB CRUD特性介绍
1、本文简要描述了mongoDB的CRUD的常规操作,并给出了示例演示 2、CRUD基本上等同于SQL数据库的增删改查 3、每一个操作都有更详细以及更丰富的用法,具体可参考官方文档
Leshami
2018/08/13
5210
indexeddb库 ZangoDB的使用
ZangoDB是一个indexedDB的类MongoDB轻量级接口库,主要是为了更轻松快速的编写indexedDB相关的操作。
雪碧君
2023/02/15
4.1K0
【翻译】MongoDB指南/CRUD操作(二)
【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关注),写确认(写关注) 1 更新文档 1.1 更新 MongoDB提供下列方法用于更新一个集合 db.collection.updateOne() 更新使用指定过滤器匹配到的文档,即使过滤器匹配到多个文档,也只会更新一个文档。 3.2版本新增特性。 db.collection.upda
甜橙很酸
2018/03/08
2.5K0
相关推荐
ArangoDB文档操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验