介绍
在数据库世界中,存储数据的标准选择传统上是关系数据库管理系统,或简称为RDBMS。 虽然MySQL,PostgreSQL和MariaDB等关系系统是强大的,是某些情况下的最佳选择,但它们并不总是合适的。
最近,非关系数据库,通常称为NoSQL数据库,已经出现了人气的激增。 这些通常更轻,限制更少,并且具有优异的扩展的潜力。 MongoDB,Riak或Cassandra等热门示例使用轻量级键值存储,列节或灵活文档存储数据。
不太常见的策略是一个图形数据库,其形成与对象之间的轻量级线和指针之间的关系。OrientDB是一个混合数据库,它可以表现得像任一个文件或一个图形数据库。 这是非常灵活的,可以导致非常有效,但复杂的相互作用。
在本指南中,我们将在Ubuntu 12.04系统上安装和探索OrientDB的一些基本用法。
安装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交互。 您可以通过使用浏览器访问此端口来访问服务器的网络工具。
连接到数据库
我们将连接我们在终端中开始的数据库,以了解OrientDB如何操作。
我们可以从我们启动服务器的同一个“bin”目录执行此操作,但首先,我们必须获取默认密码,以便我们可以连接到数据库:
nano ../config/orientdb-server-config.xml
在此文件中,搜索“用户”部分。 您应该看到一个关联名称为“root”的条目。 还将有一个非常长的密码。 将此密码复制到您可以立即粘贴它的位置。
获得信息后关闭文件。
在bin目录中,通过键入以下命令启动OrientDB控制台:
./console.sh
您将被删除到OrientDB提示符,您可以在其中与软件进行交互。
首先,我们需要连接到我们开始的服务器实例。 我们可以通过键入:
connect remote:localhost root copied_password
您可以通过尝试列出数据库来测试服务器是否可用:
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可以组织其记录成文件或图形。 文档是,在大多数情况下,因为它们是在其他NoSQL系统相同。 它们是简单的信息块,没有预定义的字段集,可以根据需要进行改变和变形。
图都是存储的另一种形式,在以不同的方式组织数据。 图形对于形成不同数据点之间的关系模式是有用的。 每个数据点称为顶点,每个关系称为边缘。 基本上,它只是一个链接,标签描述的关系,可以用来跟踪和查找不同的不同对象之间的连接。
借用面向对象的程序设计语言,OrientDB将文档组织成类。 一类 ,在OrientDB,是组织集使用某些约束和规则数据的一种方式。 它基本上定义了广义的文档格式。
集群是存储的记录组有组织地的一种方式。 它类似于关系数据库中的表。 将集群视为数据池可能更容易,因为集群可以包含不同类型的文档。
通常,默认情况下,OrientDB将为每个类创建一个集群,并在该集群中存储该类的所有文档。 然而,这里有灵活性,你可以有一个集群组两个相关的类文档在一起,或者你可以有两个单独的集群服务一个类。
使用文档
我们将首先探讨OrientDB如何使用文档,因为这可能是一种更常见的方式来组织数据给大多数人。
而不是从文档本身开始,但是,我们将通过检查类和集群结构来获得它们,以便我们有一些上下文用于讨论。
我们可以通过键入以下内容查看现有类:
classes
CLASSES:
----------------------------------------------+------------------------------------+------------+----------------+
NAME | SUPERCLASS | CLUSTERS | RECORDS |
----------------------------------------------+------------------------------------+------------+----------------+
E | | 10 | 0 |
Eat | E | 14 | 0 |
Friend | E | 15 | 0 |
. . .
你可以看到许多不同的类。 前面带有“O”的是OrientDB内部类,可用于获取有关数据库和系统本身的信息。 其他重要的类是“V”类,意味着顶点,“E”意味着边缘,它们用于图形功能。
我们可以通过键入创建一个新类:
create class New_class
然后,您可以通过键入以下内容将字段添加到文档:
create property New_class.field_name data_type
例如,如果我们想创建一个名为“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
我们可以通过键入以下内容来查看包括与Vegetable类关联的属性的信息:
info class Vegetable
要查看类的成员,可以使用browse。 我们可以使用这种语法:
browse class class_name
以类似的方式,您只需键入:
clusters
如你所见,这个列表与类列表几乎相同,因为默认情况下,OrientDB为每个新类创建一个集群。 如果类和集群之间存在差异,我们也可以按集群浏览:
browse cluster cluster_name
当我们在浏览中找到一条记录,我们想要更多的信息,我们可以通过引用它的RecordID显示它。
存储在系统中的每个记录都有自己的RecordID。 该值仅仅是数据所存储的集群,后面是存储它的顺序项目编号。 例如,集群9中的第一个记录将被赋予recordID#9:0。 第二个将被给予#9:1的recordID。
您可以使用以下语法查看记录:
display record record_number
这将引用任何最近的浏览操作,所以它不使用完整的recordID,只是显示序列的最后一个数字。
要加载记录,我们可以键入:
load record recordID
在这种情况下,我们必须指定完整的记录号。
在具有SQL语法的文档上操作
我们可以以与关系数据库大致相同的方式与文档交互。 这被实现为一个设计选择,以减少通用数据库交互的学习曲线。
例如,要查询数据,可以使用select语句。 如果我们想得到整个记录,我们不需要通配符:
select from class_name
要从集群中选择,我们可以使用:
select from cluster:cluster_name
另一个选项是从recordID中选择:
select from recordID
我们可以使用“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”和“out”线。 例如,我们的兔子有两个“外”线连接到其他部分(食品和环境)。
其他两个部分都有“in”连接,指定从另一个元素到这些元素有一个关系。
我们可以探索使用标准选择查询的组合和调用的函数这些关系expand
,它可以提供更深入的信息。 您可以指定in连接,out连接或两者:
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可以操作数据的方式。 项目的文档是一个伟大的资源,以建立这个介绍。