如何在Ubuntu14.04上安装和使用ArangoDB

来自菜鸟教程
跳转至:导航、​搜索

介绍

ArangoDB 是一个 NoSQL 数据库。 它创建于 2011 年,当时已经有许多 NoSQL 数据库,其目标是成为一个可以涵盖各种用例的综合数据库解决方案。

ArangoDB 的核心是 文档存储 ,但这仅仅是开始。 您可以使用成熟的查询语言(名为 AQL)查询数据,进行 ACID 兼容 事务,以 JavaScript 应用程序的形式添加自定义 HTTP 端点及其 嵌入式 V8,等等.

由于 ArangoDB 有很多功能,乍一看可能会令人生畏,但仔细一看,它一点也不复杂。 本文将帮助您安装 ArangoDB,并将简要介绍如何使用它的一些核心功能。

完成本教程后,您应该能够:

  • 在 Ubuntu 14.04 上安装 ArangoDB
  • 为基本用法配置 ArangoDB
  • 插入、修改和查询数据

核心概念

在整篇文章中,我们将使用一些核心概念。 在 ArangoDB 上构建项目之前,您可能需要熟悉它们:

  • Document Store:ArangoDB 将数据存储在文档中,这与关系数据库存储数据的方式不同。 文档是由 键值对 组成的任意数据结构。 key 是一个字符串,用于命名 value(类似于关系数据库中的列)。 value 可以是任何数据类型,甚至是另一个文档。 文档不绑定到任何模式。
  • 查询语言:使用 API 或查询语言与您的数据交互。 前者将大量细节留给 API 用户,而查询语言将细节交给数据库。 在关系数据库中,SQL 是查询语言的一个例子。
  • ACIDAtomicity、Consistency、Isolation和Durability四个属性描述了保证的数据库事务。 ArangoDB 支持符合 ACID 的事务。
  • V8:谷歌为 Chrome 提供支持的 JavaScript 引擎也可以很容易地嵌入到其他软件中。 在 ArangoDB 中使用它可以在数据库中使用 JavaScript。 ArangoDB 的大部分内部功能都是用 JavaScript 构建的。
  • HTTP API:ArangoDB 提供 HTTP API 允许客户端与数据库交互。 API 是 面向资源的 并且可以使用 JavaScript 进行扩展。

先决条件

在我们开始之前,请确保您的 Droplet 设置正确:

  • 使用 Ubuntu 14.04 x64 创建一个 Droplet
  • 添加一个 sudo 用户

现在您应该使用新创建的用户登录到您的服务器。 本教程中的所有示例都可以从用户的主目录执行:

cd ~

第 1 步 — 安装 ArangoDB

ArangoDB 为许多操作系统和发行版预先构建。 您不需要从源代码构建它的机会很高。 有关详细信息,请参阅 ArangoDB 文档。 对于本教程,我们将使用 Ubuntu 14.04 x64。

由于 ArangoDB 使用 OpenSUSE 的 构建服务 ,首先要下载其存储库的公钥:

wget https://www.arangodb.com/repositories/arangodb2/xUbuntu_14.04/Release.key

您需要 sudo 来安装密钥:

sudo apt-key add Release.key

接下来添加 apt 存储库并更新索引:

sudo apt-add-repository 'deb https://www.arangodb.com/repositories/arangodb2/xUbuntu_14.04/ /'
sudo apt-get update

安装 ArangoDB:

sudo apt-get install arangodb

我们可以通过查询 HTTP API 来检查一切是否顺利:

curl http://localhost:8529/_api/version

以下输出表明 ArangoDB 已启动并正在运行:

Output{"server":"arango","version":"2.5.5"}

第 2 步 — 使用 arangosh 访问命令行

ArangoDB 附带 arangosh,这是一个命令行客户端,可让您通过其 JavaScript 运行时完全访问数据库。 您可以使用它在生产中运行管理任务或脚本。

它也非常适合开始使用 ArangoDB 及其核心功能。 接下来,像这样开始一个 arangosh 会话:

arangosh

结果基本上是一个 JavaScript shell,您可以在其中运行任意 JavaScript 代码。 例如,添加两个数字:

23 + 19

你会得到这个结果:

Output42

如果您想深入了解本主题,请在 shell 中键入 tutorial

第 3 步 — 添加数据库用户

出于安全原因,只能从 arangosh 命令行界面添加用户。 您应该仍然在上一步的 arangosh shell 中。

现在让我们添加一个新用户,sammy。 该用户将有权访问整个数据库。 目前这没问题,但您可能希望在生产环境中创建更多受限用户。 使用安全的 password

require("org/arangodb/users").save("sammy", "password");

现在退出 arangosh 外壳:

exit

第 4 步 — 配置 Web 界面

ArangoDB 附带一个非常强大的 Web 界面。 它提供监控功能、数据浏览、交互式 API 文档、强大的查询编辑器,甚至是集成的 arangosh。 我们将重点关注 Web 界面的使用,用于本教程的提醒。

为了使 Web 界面易于访问,我们需要进行一些准备工作:

  1. 启用身份验证
  2. 将 ArangoDB 绑定到公共网络接口

启用身份验证

与许多其他 NoSQL 数据库一样,ArangoDB 出厂时禁用了身份验证。 如果您在共享环境中运行 ArangoDB 和/或想要使用 Web 界面,强烈建议启用身份验证 ' 。 有关此主题的更多详细信息,请参阅 ArangoDB 文档

/etc/arangodb/arangod.conf 文件中激活验证。 您可以运行此命令创建备份文件并将 disable-authentication 参数设置为 no

sudo sed -i.bak 's/disable-authentication = yes/disable-authentication = no/g' /etc/arangodb/arangod.conf

或者,使用文本编辑器将 disable-authentication 参数设置为 no

重启数据库:

sudo service arangodb restart

将 ArangoDB 绑定到公共网络接口

将 ArangoDB 配置为侦听公共网络接口。 首先,打开/etc/arangodb/arangod.conf文件进行编辑:

sudo nano /etc/arangodb/arangod.conf

找到活动的 endpoint 行,它应该位于示例部分下方的 [server] 块的末尾。 使用您自己的服务器的 IP 地址和端口 8529 更新设置,如下所示。

/etc/arangodb/arangod.conf

. . .

endpoint = tcp://your_server_ip:8529

由于 arangosh 使用自己的默认配置,我们也需要更改 /etc/arangodb/arangosh.conf 文件中的端点:

sudo nano /etc/arangodb/arangosh.conf

再次确保 endpoint 行设置为 tcp://your_server_ip:8529

/etc/arangodb/arangosh.conf

pretty-print = true

[server]
endpoint = tcp://your_server_ip:8529
disable-authentication = true

. . .

如果您希望运行两个多部分的单行命令来更新这两个文件,则可以运行以下命令:

sudo sed -i.bak "s/^endpoint = .*/endpoint = tcp:\/\/$(sudo ifconfig eth0 | grep "inet " | cut -d: -f 2 | awk '{print $1}'):8529/g" /etc/arangodb/arangod.conf
sudo sed -i.bak "s/^endpoint = .*/endpoint = tcp:\/\/$(sudo ifconfig eth0 | grep "inet " | cut -d: -f 2 | awk '{print $1}'):8529/g" /etc/arangodb/arangosh.conf

这些神秘的命令将提取当前的公共 IP 地址并替换默认绑定地址 (127.0.0.1)。 不用担心,-i.bak 选项会在更改配置之前创建更新。


现在再次重新启动 ArangoDB:

sudo service arangodb restart

第 5 步 — 访问 ArangoDB Web 界面

现在您应该可以在浏览器中访问 Web 界面:

http://your_server_ip:8529

请使用您在步骤 3 中为数据库创建的用户名和密码登录。

警告: 虽然我们设置了身份验证,但传输尚不安全。 在生产环境中,如果您让 ArangoDB 可以从其他主机访问,您应该设置 TLS 加密。


您应该看到的第一个屏幕是仪表板,其中包含有关数据库服务器的基本指标:

在顶部导航的中心,您将看到 DB: _system。 这表示当前选择的数据库。 默认为 _system 数据库。 某些管理任务只能在 _system 数据库中执行。

对于以下部分,我们将创建一个要使用的数据库。 将鼠标悬停在 DB: _system 菜单项上,然后单击 Manage DBs 链接。

在下一页上单击 添加数据库 按钮。 填写表格以创建名为 music_library 的数据库。 您必须在此对话框中输入与之前相同的用户名和密码,否则您以后将无法访问新数据库:

我们现在准备开始实际使用 ArangoDB 做一些事情。

第 6 步 — 使用 arangosh 执行 CRUD 操作

我们将暂时离开 Web 界面并返回 arangosh 命令行界面来介绍 ArangoDB 中的基本 CRUD 操作。 稍后我们将再次在 Web 界面中介绍相同的操作,但在 shell 中进行操作有助于我们更好地了解事物的工作原理。

要继续,请返回到服务器的命令行。 使用您的用户名和密码连接到新的 music_library 数据库:

arangosh --server.database music_library --server.username sammy --server.password password

创建文档集合

如果您来自关系数据库背景,那么 Collection 是 ArangoDB 相当于 SQL 数据库中的表。 我们将创建一个收藏来将歌曲存储在我们的音乐库中:

db._createDocumentCollection('songs')

ArangoDB 提供了一系列 方法来管理 Collections。 他们中的大多数在这一点上并不感兴趣,但请在您进一步了解 ArangoDB 时查看它们。 现在,我们将关注 CRUD 操作(创建、读取、更新和删除)——即如何将实际数据输入和输出数据库。

创建文档

在基于 SQL 的数据库中有行的地方,ArangoDB 有 Documents。 ArangoDB 中的文档是 JSON 对象。 每个文档都与一个集合相关联,并具有三个核心属性:_id_rev_key

文档在数据库中由其 文档句柄 唯一标识,该句柄由集合名称和 _key 组成,由 / 分隔。 文档句柄存储在文档的 _id 字段中。 _key_id 都类似于关系数据库中的主键。

注意:如果你自己不指定,ArangoDB会为每个文档创建一个_key。 如果您愿意,您可以指定自定义的 _key,但您需要确保它是唯一的。 在本教程中,我们将明确设置 _key 以便更容易复制和粘贴示例。


让我们将第一个文档添加到 songs 集合中:

db.songs.save(
{ title: "Immigrant Song", album: "Led Zeppelin III", artist: "Led Zeppelin", year: 1970, length: 143, _key: "immigrant_song" }
)
Output{ 
  "error" : false, 
  "_id" : "songs/immigrant_song", 
  "_rev" : "11295857653", 
  "_key" : "immigrant_song" 
}

db 对象将所有集合保存为属性。 每个集合都提供与该集合中的文档交互的功能。 save 函数接受任何 JSON 对象并将其作为文档存储在集合中,返回上述核心属性以及是否发生错误。 每个操作的返回又是一个 JSON 对象。

为了有一些东西可以玩,我们需要更多的文件。 只需复制并粘贴下一个片段即可将更多条目添加到数据库中:

db.songs.save(
{album: "Led Zeppelin III", title: "Friends", artist: "Led Zeppelin", year: 1970, length: 235, _key: "friends"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Celebration Day", artist: "Led Zeppelin", year: 1970, length: 209, _key: "celebration_day"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Since I've Been Loving You", artist: "Led Zeppelin", year: 1970, length: 445, _key: "since_i_ve_been_loving_you"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Out On the Tiles", artist: "Led Zeppelin", year: 1970, length: 244, _key: "out_on_the_tiles"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Gallows Pole", artist: "Led Zeppelin", year: 1970, length: 298, _key: "gallows_pole"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Tangerine", artist: "Led Zeppelin", year: 1970, length: 192, _key: "tangerine"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "That's the Way", artist: "Led Zeppelin", year: 1970, length: 338, _key: "that_s_the_way"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Bron-Y-Aur Stomp", artist: "Led Zeppelin", year: 1970, length: 260, _key: "bron_y_aur_stomp"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Hats Off to (Roy) Harper", artist: "Led Zeppelin", year: 1970, length: 221, _key: "hats_off_to_roy_harper"}
);

阅读文件

要检索文档,您可以使用文档句柄或 _key。 仅当您不检查集合本身时才需要使用文档句柄。 有一个集合,你可以使用 document 函数:

db.songs.document('immigrant_song');
Output{ 
  "year" : 1970, 
  "length" : 143, 
  "title" : "Immigrant Song", 
  "album" : "Led Zeppelin III", 
  "artist" : "Led Zeppelin", 
  "_id" : "songs/immigrant_song", 
  "_rev" : "11295857653", 
  "_key" : "immigrant_song" 
}

现在我们可以创建和读取文档,我们将研究如何更改它们:

更新文件

在更新数据时,您有两个选择:replaceupdate

replace 函数会将整个文档替换为新文档,即使您提供完全不同的属性。

另一方面,update 函数将通过将文档与给定属性合并来修补文档。 让我们先尝试破坏性较小的 update,我们更新其中一首歌曲的 genre

db.songs.update("songs/immigrant_song",

{ genre: "Hard Rock" }

);

我们来看看更新的歌曲条目:

db.songs.document("songs/immigrant_song");
Output{ 
  "year" : 1970, 
  "length" : 143, 
  "title" : "Immigrant Song", 
  "album" : "Led Zeppelin III", 
  "artist" : "Led Zeppelin", 
  "genre" : "Hard Rock", 
  "_id" : "songs/immigrant_song", 
  "_rev" : "11421424629", 
  "_key" : "immigrant_song" 
}

update 函数在您拥有大型文档并且只需要更新其属性的一小部分时特别有用。

相反,将相同的 JSON 与 replace 函数一起使用会破坏您的数据。

db.songs.replace("songs/immigrant_song",

{ genre: "Hard Rock" }

);

立即查看更新的歌曲:

db.songs.document("songs/immigrant_song")

如您所见,原始数据已从文档中删除:

Output{ 
  "genre" : "Hard Rock", 
  "_id" : "songs/immigrant_song", 
  "_rev" : "11495939061", 
  "_key" : "immigrant_song" 
}

删除文档

要从集合中删除文档,请使用文档句柄调用 remove 函数:

db.songs.remove("songs/immigrant_song")

虽然 arangosh shell 是一个很棒的工具,但它对于探索 ArangoDB 的其他功能来说很麻烦。 接下来,我们将研究内置的 Web 界面以进一步挖掘其功能。

第 7 步 — 使用 Web 界面执行 CRUD 操作

我们已经了解了如何在 arangosh 上处理文档,现在我们回到 Web 界面。 在浏览器中访问 http://your_server_ip:8529/_db/music_library

创建文档集合

单击顶部导航栏中的 Collections 选项卡。

可以看到我们从命令行添加的已有的songs集合; 如果您愿意,请随意单击它并查看条目。

在主 Collections 页面中,单击 Add Collection 按钮。

由于我们已经有了 songs,我们将添加一个 albums 集合。 在弹出的New Collection对话框中输入albums作为Name。 默认类型 Document 很好。

单击保存,您现在应该在页面上看到两个集合。

单击 albums 集合。 您会看到一个空集合:

创建文档

点击右上角的【X10X】+【X15X】符号添加文档。 您将首先被要求提供 _key。 输入 led_zeppelin_III 作为键。

接下来有一个表单,您可以在其中编辑文档的内容。 有一种添加属性的图形方式称为 Tree,但现在,通过从 Tree 下拉菜单中选择它来切换到 Code 视图:

请将以下 JSON 复制并粘贴到编辑器区域(确保只使用一组花括号):

{
"name": "Led Zeppelin III",
"release_date": "1970-10-05",
"producer": "Jimmy Page",
"label": "Atlantic",
"length": 2584
}

请注意,在此模式下需要引用键。 完成后,点击 Save 按钮。 该页面应闪烁绿色片刻以指示成功保存。

阅读文件

保存新文档后,您需要手动导航回 Collections 页面。

如果单击 albums 集合,您将看到新条目。

更新文件

要编辑文档的内容,只需在文档概览中单击要编辑的行。 您将看到与创建新文档时相同的编辑器。

删除文档

删除文档就像按每个文档行末尾的 - 图标一样简单。 出现提示时确认删除。

此外,特定集合的 Collections 概览页面允许您导出和导入数据、管理索引和过滤文档。

如前所述,Web 界面提供了很多功能。 涵盖所有功能超出了本教程的范围,因此请您自行探索其他功能。 我们将在本教程中深入研究另一个功能:AQL 编辑器。

第 8 步 — 使用 AQL 查询数据

正如介绍中提到的,ArangoDB 附带了一种称为 AQL 的成熟查询语言。

要在 Web 界面中与 AQL 交互,请单击顶部导航中的 AQL 编辑器 选项卡。 您将看到一个空白编辑器。

要在编辑器和结果视图之间切换,请使用右上角的 QueryResult 选项卡:

编辑器具有语法突出显示、撤消/重做功能和查询保存。 以下部分将探讨 AQL 的一些特性。 如需完整参考,请访问 综合文档

AQL 基础知识

AQL 是一种声明性语言,这意味着查询表示应该实现什么结果,而不是应该如何实现。 它允许查询数据,但也允许修改数据。 这两种方法可以结合起来完成复杂的任务。

在 AQL 中读取和修改查询完全符合 ACID。 操作要么全部完成,要么根本不完成。 即使读取数据也会发生在数据的一致快照上。

我们再次从创建数据开始。 让我们为我们的 songs 收藏添加更多歌曲。 只需复制并粘贴以下查询:

FOR song IN [

{ album: "Led Zeppelin", title: "Good Times Bad Times", artist: "Led Zeppelin", length: 166, year: 1969, _key: "good_times_bad_times" }

,

{ album: "Led Zeppelin", title: "Dazed and Confused", artist: "Led Zeppelin", length: 388, year: 1969, _key: "dazed_and_confused" }

,

{ album: "Led Zeppelin", title: "Communication Breakdown", artist: "Led Zeppelin", length: 150, year: 1969, _key: "communication_breakdown" }

]

INSERT song IN songs

单击提交按钮。

此查询已经是 AQL 工作原理的一个很好的示例:您使用 FOR 遍历文档列表并对每个文档执行操作。 该列表可以是包含 JSON 对象的数组或数据库中的任何集合。 操作包括过滤、修改、选择更多文档、创建新结构或(如本例中)将文档插入数据库。 事实上,AQL 也支持所有的 CRUD 操作。

要获得数据库中所有歌曲的概览,请运行以下查询。 它相当于基于 SQL 的数据库中的 SELECT * FROM songs(由于编辑器会记住上次查询,因此您应该单击 垃圾桶 图标来清除编辑器):

FOR song IN songs RETURN song

现在您将在文本字段中看到歌曲数据库中的所有条目。 返回 Query 选项卡并再次清除编辑器。

另一个示例涉及对播放时间超过三分钟的歌曲进行基本过滤:

FOR song IN songs

FILTER song.length > 180

RETURN song

结果显示在编辑器的 Result 选项卡中:

复杂 AQL 示例

AQL 为所有支持的数据类型提供了 函数集 ,甚至允许 添加新函数 。 结合在查询中分配变量的能力,您可以构建非常复杂的结构。 这使您可以将数据密集型操作移到更靠近数据本身的位置,而不是在客户端上执行它们。 为了说明这一点,我们将一首歌曲的时长格式化为 mm:ss 以便用户可以很好地阅读:

FOR song IN songs

FILTER song.length > 180

LET minutes = FLOOR(song.length / 60)

LET seconds = song.length % 60

RETURN

{ title: song.title, duration: CONCAT_SEPARATOR(':', minutes, seconds) }

这次我们将只返回歌曲名称和持续时间。 RETURN 允许您为每个输入文档创建一个新的 JSON 对象以返回。

AQL 是一种具有很多特性的复杂语言。 但是还有一个特性值得一提,尤其是在 NoSQL 数据库的上下文中:联接。

加入 AQL

使用文档存储作为数据库有几个含义。 您应该以与使用关系数据库时不同的方式对数据进行建模。

在文档存储中,您可以嵌入数据,否则这些数据将被建模为关系,但这种方法并不总是可行的。 在某些情况下,关系更有意义。 如果无法让数据库执行所需的连接,您最终会在客户端连接数据,或者非规范化数据模型并嵌入子文档。 这对于复杂的大型数据集尤其成问题。

所以,让我们做一个连接。

为了说明这个特性,我们将引用 albums 集合替换歌曲的 album 属性。 我们之前已经创建了专辑 Led Zeppelin III 作为文档。 如果您在前面的示例中删除了相册,请返回并重新添加相册。

此查询将解决问题:

FOR album IN albums

FOR song IN songs

FILTER song.album == album.name

LET song_with_album_ref = MERGE(UNSET(song, 'album'),

{ album_key: album._key }

)

REPLACE song WITH song_with_album_ref IN songs

我们首先遍历所有专辑,然后查找与这张专辑相关的所有歌曲。 下一步是创建一个包含 album_key 属性和 UNSET album 属性的新文档。 我们将使用 REPLACE 而不是 UPDATE 来更新歌曲文件。 这是可能的,因为我们之前创建了一个新的歌曲文件。

数据迁移后,我们现在可以将相册文档维护在一个地方。 在获取歌曲数据时,我们可以使用 join 将专辑名称再次添加到歌曲文档中:

FOR song IN songs

FOR album IN albums

FILTER album._key == song.album_key

RETURN MERGE(song,

{ album: album.name }

)

我们几乎没有触及 AQL 可以完成的功能,但您应该对可以实现的功能有一个很好的印象。 有关完整的语言参考和更多示例,请参阅广泛的 文档

(可选)第 9 步 — 进行备份

一旦将 ArangoDB 数据库投入生产,您就应该开始考虑备份。 不过,在此之前建立备份是一个好习惯。

使用 DigitalOcean Backup 功能是一个好的开始。 此外,您可能希望考虑使用 arangodumparangorestore 来更细粒度地控制要备份的内容和存储备份的位置。

(可选)第 10 步 — 升级

当 ArangoDB 的新版本发布时,它将通过配置的包存储库发布。 要安装最新版本,首先需要更新存储库索引:

sudo apt-get update

现在停止数据库:

sudo service arangodb stop

将其更新到最新版本:

sudo apt-get install arangodb

注意:安装更新后,系统会尝试启动arangodb服务。 这可能会失败,因为需要升级数据库文件。 这是可以预料的。


您可能需要自己升级数据库文件:

sudo service arangodb upgrade

之后,像往常一样启动服务器:

sudo service arangodb start

使用 Foxx 应用程序扩展 ArangoDB

在我们结束之前,还有一件事值得一提:由于 ArangoDB 有一个集成的 V8 引擎来处理所有的 JavaScript,并且它有一个内置的 HTTP 服务器,我们可以使用自定义端点扩展现有的 HTTP API。 此功能称为 Foxx

Foxx 是一个使用 ArangoDB 构建具有持久数据的自定义微服务的框架。 Foxx 应用程序是用 JavaScript 编写的,并在 ArangoDB 的 V8 上下文中运行。 该应用程序可以直接访问本机 JavaScript 接口,因此无需任何 HTTP 往返即可访问数据。 Foxx 提供了一个最小的框架,类似于用于 Ruby 的 Sinatra 或用于 Python 的 Flask。 您编写控制器来处理传入请求并在模型内实现业务逻辑。

Foxx 应用程序可以通过 Web 界面进行管理,并且可以像任何其他应用程序一样进行开发。 您可以将它们置于版本控制之下,甚至可以直接从 Git 存储库中部署它们。 由于它们只是 JavaScript,因此对它们进行单元测试很简单。 对于简单的用例,它们很像关系数据库系统中的存储过程,但 Foxx 代码更易于维护和测试。

使用 Foxx 应用程序作为存储过程只是一个开始。 想象一下,您有多个共享某些业务逻辑的应用程序。 使用 Foxx,您可以将此业务逻辑移到更靠近数据的位置,以加快处理速度并降低在组件之间分配共享实现的复杂性。 将 ArangoDB 作为集群运行甚至负责让 Foxx 应用程序在集群中的每个成员上都可用。

Foxx 甚至可以实现整个 Web 应用程序。 使用 Angular 或 Ember 等前端框架可以让您完全脱离数据库运行应用程序。 为此,不需要额外的基础设施。 在生产环境中,您最终会将 Nginx 或类似的东西放在 ArangoDB 前面。 ArangoDB 附带一些 Foxx 应用程序,这些应用程序提供常见功能,例如身份验证和会话存储。 如果 npm 包不依赖 HTTP 功能,您甚至可以使用它们。

有关 Foxx 的良好介绍,请参阅此 cookbook

结论

ArangoDB 是一个功能强大的数据库,具有广泛的支持用例。 它维护得很好,并且有很好的文档。 开始使用它很容易,因为每个主要操作系统都有软件包。 Web 界面减轻了探索特性的负担,如果您来自关系背景,使用 AQL 与使用 SQL 并没有什么不同。

可以选择使用 JavaScript 应用程序和图形功能扩展数据库,使 ArangoDB 成为一个完整的包,以启动和发展应用程序。

到目前为止,我们已经分享了 ArangoDB 的大图。

作为后续步骤,我们建议如下:

  • 对于任何实际应用程序,您都将与 HTTP API 进行交互。 我们没有在这里介绍它,因为您很可能不会直接使用它,而是通过众多 原生语言驱动程序 之一。
  • 大多数时候,与 ArangoDB 中的数据交互是通过 AQL 完成的。 如果您想在生产环境中使用 ArangoDB,则必须习惯它。
  • ArangoDB 不仅是一个文档存储,而且还具有非常强大的图形功能。 它允许您将数据建模为有向图中的顶点。 关系可以建模为这些顶点之间的边,而不是使用 _key 引用。 以这种方式对数据建模 比 SQL 数据库中使用的关系方法具有优势