如何在Ubuntu12.04VPS上安装和使用OrientDB
状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
介绍
在数据库领域,存储数据的标准选择传统上是关系数据库管理系统,简称 RDBMS。 虽然 MySQL、PostgreSQL 和 MariaDB 等关系系统功能强大并且在某些情况下是最佳选择,但它们并不总是合适的。
最近,非关系型数据库(通常称为 NoSQL 数据库)大受欢迎。 这些通常更轻,限制更少,并且具有出色的扩展潜力。 MongoDB、Riak 或 Cassandra 等流行示例使用轻量级键值存储、列部分或作为灵活文档来存储数据。
一种不太常见的策略是图形数据库,它通过对象之间的轻量线和指针形成关系。 OrientDB 是一个混合数据库,可以像文档数据库或图形数据库一样工作。 这是非常灵活的,可以产生非常有效但复杂的交互。
在本指南中,我们将在 Ubuntu 12.04 系统上安装和探索 OrientDB 的一些基本用法。
安装东方数据库
OrientDB 在 Ubuntu 的默认存储库中不可用,因此我们必须从项目的 GitHub 页面获取它。 然而,在我们这样做之前,我们应该安装一些必备软件:
sudo apt-get update sudo apt-get install openjdk-7-jdk git ant
该过程完成后,您可以从 GitHub 页面克隆最新的快照。 我们将在我们的主目录中执行此操作:
cd git clone https://github.com/orientechnologies/orientdb.git
这将在您的主目录中创建一个名为“orientdb”的目录。 进入这个目录,然后使用我们安装的 Apache ant
工具来构建软件:
cd orientdb ant clean install
OrientDB 完成构建后,您的主目录下将有一个名为“releases”的新目录。 我们在版本化文件夹中有数据库系统:
cd ../releases/orientdb*
切换到 bin 目录并通过键入以下命令启动服务器:
cd bin ./server.sh &
这将开始在您的系统上在后台运行服务器。 如果需要杀掉服务器实例,可以用ps搜索pid,然后杀掉进程:
ps aux | grep server.sh | grep -v grep | awk '{ print $2; }' | xargs kill
启动时,服务器会公开两个单独的端口,您可以根据您希望使用的协议使用它们:
- 2424:此端口已打开,用于对数据库进行二进制访问。 这意味着您可以使用使用网络二进制协议或数据库控制台操作的客户端和驱动程序通过此端口与数据库进行交互。
- 2480:此端口被打开并用于通过 RESTful API 进行 HTTP 交互。 您可以通过使用浏览器访问此端口来访问服务器的 Web 工具。
连接到数据库
我们将连接我们在终端中启动的数据库,以了解 OrientDB 是如何运行的。
我们可以从我们启动服务器的同一个“bin”目录中执行此操作,但首先,我们必须获取默认密码,以便我们可以连接到数据库:
nano ../config/orientdb-server-config.xml
在此文件中,搜索“用户”部分。 您应该会看到一个关联名称为“root”的条目。 还会有一个非常长的密码。 将此密码复制到您可以暂时粘贴的地方。
获得信息后关闭文件。
在 bin 目录中,输入以下命令启动 OrientDB 控制台:
./console.sh
您将进入 OrientDB 提示符,您可以在其中与软件进行交互。
首先,我们需要连接到我们启动的服务器实例。 我们可以通过键入:
远程连接:localhost root复制密码
您可以通过尝试列出数据库来测试服务器是否可用:
list databases
如果成功,您应该会看到一个 GratefulDeadConcerts
数据库,该数据库用作 OrientDB 中的示例数据库。 如果没有,您应该会看到以下警告:
Not connected to the Server instance. You've to connect to the Server using server's credentials (look at orientdb-*server-config.xml file)
您现在应该已连接到服务器并准备好向它发出命令。
使用与服务器连接类似的语法连接到我们拥有的数据库。 该数据库的用户为 admin
,密码为 admin
:
connect remote:localhost/GratefulDeadConcerts admin admin
类、集群、图表和文档
OrientDB 使用多个不同层次级别的各种类别来组织其信息。
由于其混合设计,OrientDB 可以将其记录组织成文档或图形。 Documents 在很大程度上与其他 NoSQL 系统中的相同。 它们是简单的信息块,没有预定义的字段集,可以根据需要进行更改和变形。
Graphs 是另一种以不同方式组织数据的存储形式。 图表对于形成不同数据点之间的关系模式很有用。 每个数据点称为顶点,每个关系称为边。 基本上,它只是一个带有描述关系的标签的链接,可用于跟踪和查找不同不同对象之间的联系。
借用面向对象的编程语言,OrientDB 将文档组织成类。 OrientDB 中的 class 是一种使用某些约束和规则来组织数据集的方法。 它基本上定义了广义上的文档格式。
cluster 是一种以有组织的方式存储记录组的方法。 它类似于关系数据库中的表。 将集群视为数据池可能更容易,因为集群可以包含不同类型的文档。
通常,默认情况下,OrientDB 将为每个类创建一个集群,并将该类的所有文档存储在该集群中。 但是,这里有灵活性,您可以让一个集群将两个相关的类文档组合在一起,或者您可以让两个单独的集群为一个类提供服务。
使用文档
我们将从探索 OrientDB 如何处理文档开始,因为这可能是大多数人更熟悉的组织数据的方式。
不过,我们不会从文档本身开始,而是通过检查类和集群结构来了解它们,以便我们有一些讨论的背景。
我们可以通过键入以下内容来查看现有类:
classes
CLASSES: ----------------------------------------------+------------------------------------+------------+----------------+ NAME | SUPERCLASS | CLUSTERS | RECORDS | ----------------------------------------------+------------------------------------+------------+----------------+ E | | 10 | 0 | Eat | E | 14 | 0 | Friend | E | 15 | 0 | . . .
您可以看到许多不同的课程。 前面带有“O”的一个是 OrientDB 内部类,可用于获取有关数据库和系统本身的信息。 其他重要的类是“V”类,表示顶点,“E”表示边,用于图形功能。
我们可以通过键入以下内容来创建一个新类:
创建类New_class
然后,您可以通过键入以下内容将字段添加到文档:
创建属性New_class 。 字段名称数据类型
例如,如果我们想创建一个名为“vegetables”的类并开始定义一些重要的属性,我们可以输入:
create class Vegetable create property Vegetable.name string create property Vegetable.color string create property Vegetable.quantity integer create property Vegetable.good_on_pizza boolean
我们可以通过键入以下内容来查看包括与蔬菜类关联的属性的信息:
info class Vegetable
要查看班级的成员,您可以使用浏览。 我们可以使用以下语法:
浏览类class_name
以类似的方式,您只需键入以下内容即可查看集群:
clusters
如您所见,这个列表与类列表几乎相同,因为 OrientDB 默认为每个新类创建一个集群。 如果类和集群有区别,我们也可以按集群浏览:
浏览集群cluster_name
当我们在浏览中发现一条我们想要更多信息的记录时,我们可以通过引用它的 RecordID 来显示它。
存储在系统中的每条记录都有自己的 RecordID。 该值只是存储数据的集群,后跟存储数据的顺序项目编号。 例如,集群 9 中的第一条记录将被赋予记录 ID #9:0。 第二个将被赋予 #9:1 的记录 ID。
您可以使用以下语法查看记录:
显示记录record_number
这将引用最近的浏览操作,因此它不使用完整的记录 ID,只使用显示序列的最后一个数字。
要加载记录,我们可以键入:
加载记录recordID
在这种情况下,我们必须指定完整的记录号。
使用 SQL 语法对文档进行操作
我们可以以与关系数据库相同的方式与文档进行交互。 这是作为一种设计选择来实现的,以减少常见数据库交互的学习曲线。
例如,要查询数据,您可以使用 select 语句。 如果我们想获取整个记录,我们不需要通配符:
从类名中选择
要从集群中进行选择,我们可以使用:
从集群中选择: cluster_name
另一种选择是从记录 ID 中选择:
从记录 ID中选择
我们可以使用“where”和“order”对数据进行约束和排序:
select from OIdentity where name = 'admin' order by rules
您可以通过多种其他方式查询数据,其中大部分都遵循 SQL 语法。
使用图表
处理记录的一种不太常见的方式,但为 OrientDB 增加了很多灵活性的方式是图关系行为。
OrientDB 可以在图上下文中创建记录。 我们将数据点定位为顶点。 这些是可以通过“边缘”连接的独立数据片段,边缘是在两个不相关片段之间建立连接的基本指针。
我们可以通过扩展名为“V”的默认顶点类来创建顶点类:
create class Animal extends V
这将创建一个名为 Animal 的类。 这个类的每个成员代表一个点,我们可以连接到该类的其他成员或其他顶点类的其他成员。
让我们创建一个食物类和一个环境类,以便我们可以建立一些联系。
create class Food extends V create class Environment extends V
现在我们有 3 个顶点类。 我们也应该建立一些关系。 这些关系称为边,它们基本上描述了这两个部分是如何相关的:
create class Eat extends E create class Live extends E
让我们在每个中创建一个成员:
create vertex Animal set name = 'Rabbit' create vertex Food set name = 'Carrot' create vertex Environment set name = 'Forest'
现在我们需要将边缘应用于这些数据点以创建关系:
create edge Eat from (select from Animal where name = 'Rabbit') to (select from Food where name = 'Carrot')
由于每条记录只有一条,我们实际上可以省略 where 子句:
create edge Live from (select from Animal) to (select from Environment)
这些边缘连接创建指向连接记录的“入”和“出”线。 例如,我们的兔子有两条“输出”线将它连接到其他部分(食物和环境)。
其他两个部分每个都有“in”连接,指定存在从另一个元素到这些元素的关系。
我们可以结合使用标准选择查询和一个名为 expand
的函数来探索这些关系,该函数可以提供更深入的信息。 您可以指定输入连接、输出连接或两者:
select expand( out() ) from Animal
----+-----+------+------+------- # |@RID |name |in_Eat|in_Live ----+-----+------+------+------- 0 |#18:0|Carrot|#17:0 |null 1 |#19:0|Forest|null |#17:0 ----+-----+------+------+-------
我们可以使用这些来形成复杂的网络来解释不同数据之间的关系。 与传统的关系方式相比,使用边缘和链接建立这些连接的优点是返回相关数据更快且成本更低。
您可以创建许多不同的连接,而不会增加查询的大量开销。
结论
您现在应该对如何使用 OrientDB 数据库系统有了一个很好的了解。 如您所见,它融合了来自不同系统的许多元素。 它保留 SQL 选择查询语法,同时利用传统的 NoSQL 文档存储,并构建图形关系行为。
这只是一个简短的介绍,旨在向您介绍 OrientDB 可以对数据进行操作的一些方式。 该项目的文档是构建此介绍的重要资源。