Orientdb 简明教程

OrientDB - Quick Guide

OrientDB - Overview

OrientDB 是一个开源 NoSQL 数据库管理系统。 NoSQL Database 提供了一种存储和检索无关系或非关系数据(指除表格数据之外的数据,比如文档数据或图表数据)的机制。NoSQL 数据库越来越多地在大数据和实时网络应用程序中使用。NoSQL 系统有时也称为“不只是 SQL”,以强调它们可能支持类似 SQL 的查询语言。

OrientDB 也属于 NoSQL 系列。OrientDB 是一个第二代分布式图表数据库,具有一款产品的文档灵活性,并采用 Apache 2 的开源许可。在 OrientDB 之前,市场上已有几个 NoSQL 数据库,其中之一是 MongoDB。

MongoDB vs OrientDB

MongoDB 和 OrientDB 包含许多常见功能,但引擎从根本上是不同的。MongoDB 是纯文档数据库,而 OrientDB 是混合文档图表引擎。

Features

MongoDB

OrientDB

Relationships

使用 RDBMS JOIN 来创建实体之间的关系。它的运行时成本较高,并且在数据库规模增加时无法扩展。

嵌入和连接文档,就像关系数据库一样。它使用从图表数据库世界获取的直接超快速链接。

Fetch Plan

Costly JOIN operations.

轻松返回带互联文档的完整图表。

Transactions

不支持 ACID 事务,但它支持原子操作。

支持ACID事务以及原子操作。

Query language

它有自己的语言基于JSON。

查询语言建立在SQL之上。

Indexes

对所有索引使用B树算法。

支持三种不同的索引算法以便用户可以实现最佳性能。

Storage engine

Uses memory mapping technique.

使用 LOCAL 和 PLOCAL 存储引擎名称。

OrientDB是第一个多模型开源NoSQL DBMS,它将图的功能和文档的灵活性集合在一个可伸缩的高性能操作数据库中。

OrientDB - Installation

OrientDB安装文件有两种版本可用−

  1. Community Edition − OrientDB社区版已发布,Apache以0.2许可证作为开源软件发布

  2. Enterprise Edition − OrientDB企业版已发布,是建立在社区版之上的专有软件。它作为社区版的扩展。

本章解释OrientDB社区版的安装过程,因为它开源。

Prerequisites

社区版和企业版均可在实现Java虚拟机(JVM)的任何操作系统上运行。OrientDB需要Java 1.7或更高版本。

使用以下步骤将OrientDB下载并安装到您的系统中。

Step 1 − Download OrientDB Binary Setup File

OrientDB带有内置设置文件,可在您的系统上安装数据库。它为不同的操作系统提供了不同的预编译二进制包(焦油包或ZIP包)。您可以从 Download OrientDB 链接中下载OrientDB文件。

以下屏幕截图显示了OrientDB的下载页面。您可以通过单击合适的操作系统图标来下载ZIP或焦油文件。

download page orientdb

下载后,您将在 Downloads 文件夹中获取二进制包。

Step 2 − Extract and Install OrientDB

以下是为不同的操作系统提取和安装OrientDB的过程。

In Linux

下载后,您将在 Downloads 文件夹中获取 orientdb-community-2.1.9.tar.gz 文件。您可以使用以下命令来提取焦油文件。

$ tar –zxvf orientdb-community-2.1.9.tar.gz

您可以使用以下命令从 orientdbcommunity-2.1.9 to /opt/orientdb/ 目录移动所有OrientDB库文件。在此,我们使用超级用户命令(sudo),因此您必须提供超级用户密码以执行以下命令。

$ sudo mv orientdb-community-2.1.9 /opt/orientdb

你可以使用以下命令注册 orientdb 命令和 Orient 服务器。

$ export ORIENTDB_HoME = /opt/orientdb
$ export PATH = $PATH:$ORIENTDB_HOME/bin

In Windows

  1. 下载后你会在 Downloads 文件夹中获得 orientdb-community-2.1.9.zip 文件。使用解压器解压 zip 文件。

  2. 将解压后的文件夹移动到 C:\ 目录中。

  3. 使用下列给定的值创建两个环境变量 ORIENTDB_HOME 和 PATH 变量。

ORIENT_HOME = C:\orientdb-community-2.1.9
PATH = C:\orientdb-community-2.1.9\bin

Step 3 − Configuring OrientDB Server as a Service

按照上述步骤,你可以使用 OrientDB 的桌面版本。你可以使用以下步骤以服务形式启动 OrientDB 数据库服务器。该程序根据你的操作系统而不同。

In Linux

OrientDB 提供了一个名为 orientdb.sh 的脚本文件,用以将数据库作为守护进程运行。你可以在 OrientDB 安装目录的 bin/directory 中找到它,即 $ORIENTDB_HOME/bin/orientdb.sh。

在运行脚本文件之前,你必须编辑 orientdb.sh 文件以定义两个变量。一个是 ORIENTDB_DIR ,它定义了安装目录的路径 ( /opt/orientdb ),第二个是 ORIENTDB_USER ,它定义了你希望运行 OrientDB 的用户名,如下所示。

ORIENTDB_DIR = "/opt/orientdb"
ORIENTDB_USER = "<username you want to run OrientDB>"

使用以下命令将 orientdb.sh 文件复制到 /etc/init.d/ 目录中以初始化和运行脚本。此处我们使用超级用户命令 (sudo),因此你必须提供超级用户密码才能执行以下命令。

$ sudo cp $ORIENTDB_HOME/bin/orientdb.sh /etc/init.d/orientdb

使用以下命令将 control.sh 文件从 OrientDB 安装目录 $ORIENTDB_HOME/bin 复制到系统 bin 目录 /usr/bin ,以访问 Orient DB 的控制台。

$ sudo cp $ ORIENTDB_HOME/bin/console.sh /usr/bin/orientdb

使用以下命令以服务形式启动 ORIENTDB 数据库服务器。此处你必须提供你在 orientdb.sh 文件中提到的相应用户的密码来启动服务器。

$ service orientdb start

使用以下命令了解 OrientDB 服务器守护进程正在运行哪个 PID 上。

$ service orientdb status

使用以下命令停止 OrinetDB 服务器守护进程。此处你必须提供你在 orientdb.sh 文件中提到的相应用户的密码来停止服务器。

$ service orientdb stop

In Windows

OrientDB 是一个服务器应用程序,因此它必须在启动关闭 Java 虚拟机进程之前执行多项任务。如果你想手动关闭 OrientDB 服务器,则必须执行 shutdown.bat 文件。但是,如果系统在不执行上述脚本的情况下突然关闭,则服务器实例不会正确停止。Windows 中操作系统使用一组特定信号控制的程序称为 services

我们必须使用 Apache Common Daemon ,它允许 Windows 用户将 Java 应用程序包装为 Windows 服务。以下是下载和注册 Apache common daemon 的过程。

  1. 点击 Apache Common Daemons for windows 的链接。

  2. 点击 common-daemon-1.0.15-bin-windows 下载。

  3. 解压 common-daemon-1.0.15-bin-windows 目录。解压后你会在目录内找到 prunsrv.exeprunmgr.exe 文件。在这些文件中, prunsrv.exe 文件是一个服务应用程序,用于将应用程序作为服务运行。 prunmgr.exe 文件是一个用于监控和配置 Windows 服务的应用程序。

  4. 转到 OrientDB 安装文件夹 → 创建一个新目录并将其命名为服务。

  5. 复制 prunsrv.exeprunmgr .exe ,将其粘贴到服务目录中。

  6. 要将 OrientDB 配置为 Windows 服务,您必须执行一个使用 prusrv.exe 作为 Windows 服务的短脚本。

  7. 在定义 Windows 服务之前,您必须根据服务名称重命名 prunsrv 和 prunmgr。例如,分别是 OrientDBGraph 和 OrientDBGraphw。此处 OrientDBGraph 是服务名称。

  8. 将以下脚本复制到名为 installService.bat 的文件中,并将其放在 %ORIENTDB_HOME%\service\ 目录中。

:: OrientDB Windows Service Installation
@echo off
rem Remove surrounding quotes from the first parameter
set str=%~1
rem Check JVM DLL location parameter
if "%str%" == "" goto missingJVM
set JVM_DLL=%str%
rem Remove surrounding quotes from the second parameter
set str=%~2
rem Check OrientDB Home location parameter
if "%str%" == "" goto missingOrientDBHome
set ORIENTDB_HOME=%str%


set CONFIG_FILE=%ORIENTDB_HOME%/config/orientdb-server-config.xml
set LOG_FILE = %ORIENTDB_HOME%/config/orientdb-server-log.properties
set LOG_CONSOLE_LEVEL = info
set LOG_FILE_LEVEL = fine
set WWW_PATH = %ORIENTDB_HOME%/www
set ORIENTDB_ENCODING = UTF8
set ORIENTDB_SETTINGS = -Dprofiler.enabled = true
-Dcache.level1.enabled = false Dcache.level2.strategy = 1
set JAVA_OPTS_SCRIPT = -XX:+HeapDumpOnOutOfMemoryError


rem Install service
OrientDBGraphX.X.X.exe //IS --DisplayName="OrientDB GraphEd X.X.X" ^
--Description = "OrientDB Graph Edition, aka GraphEd, contains OrientDB server
integrated with the latest release of the TinkerPop Open Source technology
stack supporting property graph data model." ^

--StartClass = com.orientechnologies.orient.server.OServerMain
-StopClass = com.orientechnologies.orient.server.OServerShutdownMain ^

--Classpath = "%ORIENTDB_HOME%\lib\*" --JvmOptions
"Dfile.Encoding = %ORIENTDB_ENCODING%; Djava.util.logging.config.file = "%LOG_FILE%";
Dorientdb.config.file = "%CONFIG_FILE%"; -Dorientdb.www.path = "%WWW_PATH%";
Dlog.console.level = %LOG_CONSOLE_LEVEL%; -Dlog.file.level = %LOG_FILE_LEVEL%;
Dorientdb.build.number = "@BUILD@"; -DORIENTDB_HOME = %ORIENTDB_HOME%" ^

--StartMode = jvm --StartPath = "%ORIENTDB_HOME%\bin" --StopMode = jvm
-StopPath = "%ORIENTDB_HOME%\bin" --Jvm = "%JVM_DLL%"
-LogPath = "%ORIENTDB_HOME%\log" --Startup = auto

EXIT /B

:missingJVM
echo Insert the JVM DLL location
goto printUsage

:missingOrientDBHome
echo Insert the OrientDB Home
goto printUsage

:printUsage
echo usage:
echo     installService JVM_DLL_location OrientDB_Home
EXIT /B

该脚本需要两个参数 -

  1. jvm.dll 的位置,例如 C:\ProgramFiles\java\jdk1.8.0_66\jre\bin\server\jvm.dll

  2. OrientDB 安装的位置,例如 C:\orientdb-community-2.1.9

  3. 当您执行 OrientDBGraph.exe 文件(原始 prunsrv)并双击它时,该服务便会安装。

  4. 使用以下命令将服务安装到 Windows 中。

> Cd %ORIENTDB_HOME%\service
> installService.bat "C:\Program Files\Java\jdk1.8.0_66\jre\bin\server
   \jvm.dll" C:\orientdb-community-2.1.9

打开任务管理器服务,您将看到其中有已注册服务名称的以下屏幕截图。

task manager

Step 4 − Verifying OrientDB Installation

此步骤将通过以下步骤验证 OrientDB 数据库服务器安装。

  1. Run the server.

  2. Run the console.

  3. Run the studio.

这根据操作系统而异。

In Linux

按照给定的步骤验证 Linux 中的 OrientDB 安装。

Running the server − 您可以使用以下命令启动服务器。

$ cd $ORIENTDB_HOME/bin
$ ./server.sh

或者,您可以使用以下命令将 OrientDB 服务器启动为 UNIX 守护程序。

$ service orientdb start

如果安装成功,您将收到以下输出。

          .
          .`        `
          ,      `:.
         `,`    ,:`
         .,.   :,,
         .,,  ,,,
    .    .,.:::::  ````                                 :::::::::     :::::::::
    ,`   .::,,,,::.,,,,,,`;;                      .:    ::::::::::    :::    :::
    `,.  ::,,,,,,,:.,,.`  `                       .:    :::      :::  :::     :::
     ,,:,:,,,,,,,,::.   `        `         ``     .:    :::      :::  :::     :::
      ,,:.,,,,,,,,,: `::, ,,   ::,::`   : :,::`  ::::   :::      :::  :::    :::
       ,:,,,,,,,,,,::,:   ,,  :.    :   ::    :   .:    :::      :::  :::::::
        :,,,,,,,,,,:,::   ,,  :      :  :     :   .:    :::      :::  :::::::::
  `     :,,,,,,,,,,:,::,  ,, .::::::::  :     :   .:    :::      :::  :::     :::
  `,...,,:,,,,,,,,,: .:,. ,, ,,         :     :   .:    :::      :::  :::     :::
    .,,,,::,,,,,,,:  `: , ,,  :     `   :     :   .:    :::      :::  :::     :::
      ...,::,,,,::.. `:  .,,  :,    :   :     :   .:    :::::::::::   :::     :::
           ,::::,,,. `:   ,,   :::::    :     :   .:    :::::::::     ::::::::::
           ,,:` `,,.
          ,,,    .,`
         ,,.     `,                                          GRAPH DATABASE
       ``        `.
                 ``                                          orientdb.com
                 `

2016-01-20 19:17:21:547 INFO  OrientDB auto-config DISKCACHE = 1,
   649MB (heap = 494MB os = 4, 192MB disk = 199, 595MB) [orientechnologies]
2016-01-20 19:17:21:816 INFO  Loading configuration from:
   /opt/orientdb/config/orientdb-server-config.xml... [OServerConfigurationLoaderXml]
2016-01-20 19:17:22:213 INFO  OrientDB Server v2.1.9-SNAPSHOT
   (build 2.1.x@r; 2016-01-07 10:51:24+0000) is starting up... [OServer]
2016-01-20 19:17:22:220 INFO  Databases directory: /opt/orientdb/databases [OServer]
2016-01-20 19:17:22:361 INFO  Port 0.0.0.0:2424 busy,
   trying the next available... [OServerNetworkListener]
2016-01-20 19:17:22:362 INFO  Listening binary connections on 0.0.0.0:2425
   (protocol v.32, socket = default) [OServerNetworkListener]
...
2016-01-20 19:17:22:614 INFO  Installing Script interpreter. WARN:
   authenticated clients can execute any kind of code into the server
   by using the following allowed languages:
   [sql] [OServerSideScriptInterpreter]
2016-01-20 19:17:22:615 INFO  OrientDB Server v2.1.9-SNAPSHOT
   (build 2.1.x@r; 2016-01-07 10:51:24+0000) is active. [OServer]

Running the console − 您可以使用以下命令在控制台下运行 OrientDB。

$ orientdb

如果安装成功,您将收到以下输出。

OrientDB console v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0

orientdb>

Running the Studio − 启动服务器后,您可以在浏览器中使用以下 URL ( http://localhost:2480/ )。您将看到以下屏幕截图。

running studio

In Windows

按照给定的步骤验证 Windows 中的 OrientDB 安装。

Running the server − 您可以使用以下命令启动服务器。

> cd %ORIENTDB_HOME%\bin
> ./server.bat

如果安装成功,您将收到以下输出。

          .
          .`        `
          ,      `:.
         `,`    ,:`
         .,.   :,,
		 .,,  ,,,
    .    .,.:::::  ````                                 :::::::::     :::::::::
    ,`   .::,,,,::.,,,,,,`;;                      .:    ::::::::::    :::    :::
    `,.  ::,,,,,,,:.,,.`  `                       .:    :::      :::  :::     :::
     ,,:,:,,,,,,,,::.   `        `         ``     .:    :::      :::  :::     :::
      ,,:.,,,,,,,,,: `::, ,,   ::,::`   : :,::`  ::::   :::      :::  :::    :::
       ,:,,,,,,,,,,::,:   ,,  :.    :   ::    :   .:    :::      :::  :::::::
        :,,,,,,,,,,:,::   ,,  :      :  :     :   .:    :::      :::  :::::::::
  `     :,,,,,,,,,,:,::,  ,, .::::::::  :     :   .:    :::      :::  :::     :::
  `,...,,:,,,,,,,,,: .:,. ,, ,,         :     :   .:    :::      :::  :::     :::
    .,,,,::,,,,,,,:  `: , ,,  :     `   :     :   .:    :::      :::  :::     :::
      ...,::,,,,::.. `:  .,,  :,    :   :     :   .:    :::::::::::   :::     :::
           ,::::,,,. `:   ,,   :::::    :     :   .:    :::::::::     ::::::::::
           ,,:` `,,.
          ,,,    .,`
         ,,.     `,                                          GRAPH DATABASE
       ``        `.
                 ``                                          orientdb.com
                 `

2016-01-20 19:17:21:547 INFO  OrientDB auto-config DISKCACHE = 1,649MB
   (heap = 494MB os = 4, 192MB disk = 199, 595MB) [orientechnologies]
2016-01-20 19:17:21:816 INFO  Loading configuration from:
   /opt/orientdb/config/orientdb-server-config.xml...
   [OServerConfigurationLoaderXml]
...
2016-01-20 19:17:22:615 INFO  OrientDB Server v2.1.9-SNAPSHOT
   (build 2.1.x@r; 2016-01-07 10:51:24+0000) is active. [OServer]

Running the console − 您可以使用以下命令在控制台下运行 OrientDB。

> %ORIENTDB_HOME%\bin\console.bat

如果安装成功,您将收到以下输出。

OrientDB console v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0

orientdb\>

Running the Studio − 启动服务器后,您可以在浏览器中使用以下 URL ( http://localhost:2480/ )。您将看到以下屏幕截图。

running studio

OrientDB - Basic Concepts

OrientDB 的主要功能是对多模型对象的支持,即支持文档、图、键/值和真实对象等不同的模型。它包含一个单独的 API 来支持这四个模型。

Document Model

术语文档模型属于 NoSQL 数据库。这意味着数据存储在文档中,并且一组文档称为 Collection 。从技术上讲,文档表示一组键/值对,或称为字段或属性。

OrientDB 使用类、丛集和链接等概念来存储、分组和分析文档。

下表说明了关系模型、文档模型和 OrientDB 文档模型之间的比较 −

Relational Model

Document Model

OrientDB Document Model

Table

Collection

Class or Cluster

Row

Document

Document

Column

Key/value pair

Document field

Relationship

Not available

Link

Graph Model

图数据结构是一个数据模型,它可以以顶点(节点)的形式存储数据,顶点通过边(弧)相互连接。OrientDB 图数据库的构思源自属性图。顶点和边是图模型的主要组成部分。它们包含属性,这可以使它们看起来类似于文档。

下表显示了图模型、关系数据模型和 OrientDB 图模型之间的比较。

Relational Model

Graph Model

OrientDB Graph Model

Table

Vertex and Edge Class

扩展“V”(表示顶点)和“E”(表示边)的类

Row

Vertex

Vertex

Column

Vertex and Edge property

Vertex and Edge property

Relationship

Edge

Edge

The Key/Value Model

键/值模型表示数据可以以键/值对的形式存储,其中值可以是简单类型和复杂类型。它可以支持文档和图形元素作为值。

下表说明了关系模型、键/值模型和 OrientDB 键/值模型之间的比较。

Relational Model

Key/Value Model

OrientDB Key/Value Model

Table

Bucket

Class or Cluster

Row

Key/Value pair

Document

Column

Not available

文档字段或顶点/边属性

Relationship

Not available

Link

The Object Model

此模型由面向对象编程继承,并且支持类型(子类型扩展超类型)之间的 Inheritance 、类型指的是基础类时的 Polymorphism 以及编程语言中使用的对象来自/至的 Direct binding

下表说明了关系模型、对象模型和 OrientDB 对象模型之间的比较。

Relational Model

Object Model

OrientDB Object Model

Table

Class

Class or Cluster

Row

Object

Document or Vertex

Column

Object property

文档字段或顶点/边属性

Relationship

Pointer

Link

在详细讨论之前,最好了解与 OrientDB 相关的基本术语。以下是一些重要的术语。

Record

可以从数据库加载和存储的最小单位。记录可以存储在四种类型中。

  1. Document

  2. Record Bytes

  3. Vertex

  4. Edge

Record ID

当 OrientDB 生成记录时,数据库服务器会自动为该记录分配一个单元标识符,称为 RecordID (RID)。RID 看起来像 #<cluster>:<position>。 <cluster> 表示集群标识号,<position> 表示集群中记录的绝对位置。

Documents

文档是 OrientDB 中可用的最灵活的记录类型。文档是软类型,由具有定义约束的模式类定义,但你也可以在没有任何模式的情况下插入文档,即它也支持无模式模式。

文档可以通过 JSON 格式轻松地导出和导入。例如,看一看以下 JSON 示例文档。它定义了文档详细信息。

{
   "id"        : "1201",
   "name"      : "Jay",
   "job"       : "Developer",
   "creations" : [
      {
         "name"    : "Amiga",
         "company" : "Commodore Inc."
      },

      {
         "name"    : "Amiga 500",
         "company" : "Commodore Inc."
      }
   ]
}

RecordBytes

记录类型与 RDBMS 中的 BLOB 类型相同。OrientDB 可以加载和存储文档记录类型以及二进制数据。

Vertex

OrientDB 数据库不仅是文档数据库,也是图形数据库。使用顶点和边等新概念以图形的形式存储数据。在图形数据库中,最基本的数据单位是节点,在 OrientDB 中称为顶点。顶点为数据库存储信息。

Edge

存在一种称为边(Edge)的独立记录类型,该类型将一个顶点连接到另一个顶点。边是双向的,并且只能连接两个顶点。OrientDB 中有两种类型的边,一种是常规的,另一种是轻量的。

Class

类是一种数据模型类型和从面向对象编程范例中汲取的概念。基于传统的文档数据库模型,数据以集合的形式存储,而在关系数据库模型中,数据存储在表中。OrientDB 遵循文档 API 以及 OPPS 范例。作为一个概念,OrientDB 中的类与关系数据库中的表的关系最密切,但是(与表不同)类可以是无模式的,全模式的或混合的。类可以继承自其他类,从而创建类的树。每个类都有自己的集群,(如果未定义,则默认创建)。

Cluster

集群是一个重要的概念,用于存储记录、文档或顶点。简单来说,集群是存储一组记录的地方。默认情况下,OrientDB 将为每个类创建一个集群。一个类的所有记录都存储在具有与类同名的同一集群中。您可以在数据库中创建多达 32,767(2^15-1)个集群。

CREATE class 是一条用于创建带有特定名称的集群的命令。创建集群后,您可以通过在创建任何数据模型期间指定名称来使用该集群来保存记录。

Relationships

OrientDB 支持两种类型的关系:引用和嵌入。 Referenced relationships 表示其存储到关系目标对象的直接链接。 Embedded relationships 表示其存储到嵌入记录内的关系。这种关系比引用关系更强。

Database

数据库是访问真实存储的接口。它了解高级概念,例如查询、模式、元数据、索引等。OrientDB 还提供了多个数据库类型。有关这些类型的更多信息,请参阅数据库类型。

OrientDB - Data Types

OrientDB 原生支持几种数据类型。以下是完整的表格。

Sr. No.

Type

Description

1

Boolean

仅处理值 True 或 False。 Java types : java.lang.Boolean Min : 0 Max : 1

2

Integer

32 位有符号整数。 Java types : java.lang.Interger Min : -2,147,483,648 Max : +2,147,483,647

3

Short

小的 16 位有符号整数。 Java types : java.lang.short Min : -32,768 Max : 32,767

4

Long

大的 64 位有符号整数。 Java types : java.lang.Long Min : -263 Max : +263-1

5

Float

十进制数。 Java types : java.lang.Float: 2-149 Max : (2-2-23)*2,127

6

Double

具有高精度的十进制数。 Java types : Java.lang.Double. Min : 2-1074 Max : (2-2-52)*21023

7

Date-time

具有高达毫秒精度的任何日期。 Java types : java.util.Date

8

String

任何字符串作为字母数字字符序列。 Java types : java.lang.String

9

Binary

可以包含任何值作为字节数组。 Java types : byte[ ] Min : 0 Max : 2,147,483,647

10

Embedded

记录包含在所有者内部。包含的记录没有 RecordId。 Java types : 记录

11

Embedded list

记录包含在所有者内部。包含的记录没有 RecordId,并且只能通过导航所有者记录来访问。 Java types : List<objects> Min : 0 Max : 41,000,000 项

12

Embedded set

记录包含在所有者内部。包含的记录没有 RecordId,并且只能通过导航所有者记录来访问。 Java types : set<objects> Min : 0 Max : 41,000,000 项

13

Embedded map

记录包含在所有者中作为条目的值,而键只能是字符串。所含记录没有 RecordId,只能通过导航所有者记录来访问它们。@ {s0}:Map <String、ORecord> @ {s1}:0 @ {s2}:41,000,000 项

14

Link

指向其他记录的链接。这是一种常见的 1 对 1 关系。@ {s3}:ORID,<? extends ORecord> @ {s4}:1 @ {s5}:32767:2^63-1

15

Link list

链接到其他记录。这是一种常见的 1 对多关系,其中仅存储 RecordId。@ {s6}:列表?<扩展 ORecord> @ {s7}:0 @ {s8}:41,000,000 项

16

Link set

链接到其他记录。这是一种常见的 1 对多关系。@ {s9}:设置?<扩展 ORecord> @ {s10}:0 @ {s11}:41,000,000 项

17

Link map

指向其他记录的链接作为条目值,而键只能是字符串。这是一种常见的 1 对多关系。仅存储 RecordId。@ {s12}:Map <String、? 扩展记录> @ {s13}:0 @ {s14}:41,000,000 项

18

Byte

单字节。用于存储小型的 8 位有符号整数。@ {s15}:java.lang.Byte @ {s16}:-128 @ {s17}:+127

19

Transient

未存储在数据库中的任何值。

20

Date

任何日期作为年、月和日。@ {s18}:java.util.Date

21

Custom

用于存储提供 Marshall 和 Unmarshall 方法的自定义类型。@ {s19}:OSerializableStream @ {s20}:0 @ {s21}:x

22

Decimal

未经舍入的十进制数。 Java types : java.math.BigDecimal

23

LinkBag

以特定 RidBag 形式表示的 RecordId 列表。 Java types : ORidBag

24

Any

没有确定的类型,用于指定混合类型和 null 的集合。

在以下章节中,将讨论如何在 OrientDB 中使用这些数据类型。

OrientDB - Console Modes

OrientDB 控制台是一个 Java 应用程序,用于处理 OrientDB 数据库和服务器实例。OrientDB 支持多种控制台模式。

Interactive Mode

这是默认模式。通过执行以下脚本 bin/console.sh (或在 MS Windows 系统中执行 bin/console.bat )启动控制台即可。确保有执行权限。

OrientDB console v.1.6.6 www.orientechnologies.com
Type 'help' to display all the commands supported.

orientdb>

完成此步骤后,控制台就可以接受命令。

Batch Mode

若要在批处理模式中执行命令,运行以下脚本 bin/console.sh (或在 MS Windows 系统中运行 bin/console.bat ),以分号“;”分隔传入的所有命令。

orientdb> console.bat "connect remote:localhost/demo;select * from profile"

或者调用控制台脚本,并传入文本格式的文件名,其中包含要执行的命令列表。命令必须以分号“;”分隔。

Example

Command.txt 包含您想要通过 OrientDB 控制台执行的命令列表。以下命令接受 command.txt 文件中的命令批。

orientdb> console.bat commands.txt

在批处理模式下,通过将“ignoreErrors”变量设置为 true,可以忽略错误,让脚本继续执行。

orientdb> set ignoreErrors true

Enable Echo

在管道中运行控制台命令时,你需要显示它们。在开始的时候将“echo”设置为属性,即可启用“echo”命令。以下是 OrientDB 控制台中启用 echo 属性的语法。

orientdb> set echo true

OrientDB - Create Database

OrientDB 数据库的 SQL 参考提供了多个命令,用于创建、修改和删除数据库。

以下语句是 Create Database 命令的基本语法。

CREATE DATABASE <database-url> [<user> <password> <storage-type> [<db-type>]]

以下是上文中选项的详细信息。

<database-url> - 定义数据库的 URL。URL 包含两部分,一部分是 <mode>,另一部分是 <path>。

<mode> - 定义模式,即本地模式或远程模式。

<path> - 定义到数据库的路径。

<user> - 定义连接到数据库的用户。

<password> - 定义用于连接到数据库的密码。

<storage-type> - 定义存储类型。可以在 PLOCAL 和 MEMORY 中进行选择。

Example

可以使用以下命令创建一个名为 demo 的本地数据库。

Orientdb> CREATE DATABASE PLOCAL:/opt/orientdb/databses/demo

如果数据库创建成功,将获得以下输出。

Database created successfully.
Current database is: plocal: /opt/orientdb/databases/demo

orientdb {db = demo}>

OrientDB - Alter Database

数据库是一个包含不同属性的重要数据模型,可以根据自己的要求对其进行修改。

以下语句是 Alter Database 命令的基本语法。

ALTER DATABASE <attribute-name> <attribute-value>

其中 <attribute-name> 定义要修改的属性, <attributevalue> 定义要为此属性设置的值。

下表定义了用于修改数据库的支持属性列表。

Sr.No.

Attribute Name

Description

1

STATUS

在不同的属性之间定义数据库状态。

2

IMPORTING

Sets the importing status.

3

DEFAULTCLUSTERID

使用 ID 设置默认集群。默认情况下是 2。

4

DATEFORMAT

将特定日期格式设置为默认格式。默认情况下是“yyyy-MM-dd”。

5

DATETIMEFORMAT

将特定日期时间格式设置为默认格式。默认情况下是“yyyy-MM-dd HH:mm:ss”。

6

TIMEZONE

设置特定时区。默认情况下是 Java 虚拟机 (JVM) 的默认时区。

7

LOCALECOUNTRY

设置默认国家/地区。默认情况下是 JVM 的默认国家/地区。例如:“GB”。

8

LOCALELANGUAGE

设置默认语言。默认情况下是 JVM 的默认语言。例如:“en”。

9

CHARSET

设置字符集的类型。默认情况下,它是 JVM 的默认字符集。例如:“utf8”。

10

CLUSTERSELECTION

设置用于选择集群的默认策略。这些策略将与类创建一起创建。支持的策略是默认的、循环和平衡的。

11

MINIMUMCLUSTERS

设置在创建新类时自动创建的集群的最小数量。默认值为 1。

12

CUSTOM

Sets the custom property.

13

VALIDATION

禁用或启用整个数据库的验证。

Example

从 OrientDB-2.2 版本开始,添加了新的 SQL 解析器,在某些情况下不允许使用常规语法。因此,在某些情况下,我们必须禁用新的 SQL 解析器 (StrictSQL)。你可以使用以下 Alter database 命令禁用 StrictSQL 解析器。

orientdb> ALTER DATABASE custom strictSQL = false

如果命令执行成功,则会得到以下输出。

Database updated successfully

OrientDB - Backup Database

与 RDBMS 一样,OrientDB 也支持备份和还原操作。在执行备份操作时,它会使用 ZIP 算法将当前数据库的所有文件压缩为 zip 格式。可以通过启用 Automatic-Backup 服务器插件自动使用此功能(备份)。

备份数据库或导出数据库是相同的,但是,根据过程,我们必须知道何时使用备份以及何时使用导出。

在进行备份时,它将创建一个数据库的一致副本,所有进一步的写操作都会被锁定并等待完成备份过程。在此操作中,它将创建一个只读备份文件。

如果你在进行备份时需要并发读写操作,你必须选择导出数据库而不是备份数据库。导出不会锁定数据库,并在导出过程中允许并发写入。

以下语句是数据库备份的基本语法。

./backup.sh <dburl> <user> <password> <destination> [<type>]

以下是上文中选项的详细信息。

<dburl> − 位于本地或远程位置的数据库 URL,其中包含数据库。

<user> − 指定运行备份的用户名。

<password> − 提供特定用户的密码。

<destination> − 目标文件位置,指定存储备份 zip 文件的位置。

<type> − 可选的备份类型。它有以下两个选项之一。

  1. 默认的 − 在备份期间锁定数据库。

  2. LVM − 在后台使用 LVM 写时复制快照。

Example

备份 demo 数据库(位于 local file system /opt/orientdb/database/demo 中)到一个名为 sample-demo.zip 的文件,并将其放在当前目录中。

你可以使用以下命令备份数据库 demo。

$ backup.sh plocal: opt/orientdb/database/demo admin admin ./backup-demo.zip

Using Console

你也可以使用 OrientDB 控制台完成该操作。在备份特定数据库之前,你必须首先连接到数据库。你可以使用以下命令连接到名为 demo 的数据库。

orientdb> CONNECT PLOCAL:/opt/orientdb/databases/demo admin admin

连接之后,你可以使用以下命令将数据库备份到当前目录中的名为“backup-demo.zip”的文件中。

orientdb {db=demo}> BACKUP DATABASE ./backup-demo.zip

如果此命令成功执行,你将收到一些成功通知以及以下消息。

Backup executed in 0.30 seconds

OrientDB - Restore Database

与 RDBMS 一样,OrientDB 也支持还原操作。只有在控制台模式下,你才可以成功执行此操作。

以下语句是还原操作的基本语法。

orientdb> RESTORE DATABSE <url of the backup zip file>

Example

你必须仅在控制台模式下执行此操作。因此,你首先必须使用以下 OrientDB 命令启动 OrientDB 控制台。

$ orientdb

然后,连接到相应的数据库以还原备份。你可以使用以下命令连接到名为 demo 的数据库。

orientdb> CONNECT PLOCAL:/opt/orientdb/databases/demo admin admin

连接成功后,你可以使用以下命令从“backup-demo.zip”文件还原备份。在执行之前,请确保将 backup-demo.zip 文件放在当前目录中。

Orientdb {db = demo}> RESTORE DATABASE backup-demo.zip

如果此命令成功执行,你将收到一些成功通知以及以下消息。

Database restored in 0.26 seconds

OrientDB - Connect Database

本章解释如何通过 OrientDB 命令行连接到特定数据库。它打开一个数据库。

以下是连接命令的基本语法。

CONNECT <database-url> <user> <password>

以下是上文中选项的详细信息。

<database-url> - 定义数据库的 URL。URL 包含两部分,一是 <mode>,二是 <path>。

<mode> - 定义模式,即本地模式或远程模式。

<path> - 定义到数据库的路径。

<user> - 定义连接到数据库的用户。

<password> - 定义用于连接到数据库的密码。

Example

在之前的章节中,我们已经创建了一个名为“demo”的数据库。在此示例中,我们将使用用户管理​​员连接到它。

可以使用以下命令连接到 demo 数据库。

orientdb> CONNECT PLOCAL:/opt/orientdb/databases/demo admin admin

如果成功连接,您将获得以下输出 -

Connecting to database [plocal:/opt/orientdb/databases/demo] with user 'admin'…OK
Orientdb {db = demo}>

OrientDB - Disconnect Database

本章介绍如何从 OrientDB 命令行断开与特定数据库的连接。它会关闭当前打开的数据库。

以下语句是 Disconnect 命令的基本语法。

DISCONNECT

Note − 你只能在连接到特定数据库后才能使用此命令,并且它只会关闭当前正在运行的数据库。

Example

在此示例中,我们将使用与前一章中创建的同名数据库“demo”。我们将断开与 demo 数据库的连接。

可以使用以下命令断开数据库连接。

orientdb {db = demo}> DISCONNECT

如果断开连接成功,你将收到以下输出 −

Disconnecting to database [plocal:/opt/orientdb/databases/demo] with user 'admin'…OK
orientdb>

OrientDB - Info Database

本章介绍如何从 OrientDB 命令行获取特定数据库的信息。

以下语句是 Info 命令的基本语法。

info

Note - 仅在连接到特定数据库后才能使用此命令,它将仅检索当前正在运行的数据库的信息。

Example

在此示例中,我们将使用我们在上一章创建的同名数据库“demo”。我们将从 demo 数据库检索基本信息。

可以使用以下命令断开数据库连接。

orientdb {db = demo}> info

如果断开连接成功,您将看到以下输出。

Current database: demo (url = plocal:/opt/orientdb/databases/demo)

DATABASE PROPERTIES
--------------------------------+---------------------------------------------+
 NAME                           | VALUE                                       |
--------------------------------+---------------------------------------------+
 Name                           | null                                        |
 Version                        | 14                                          |
 Conflict Strategy              | version                                     |
 Date format                    | yyyy-MM-dd                                  |
 Datetime format                | yyyy-MM-dd HH:mm:ss                         |
 Timezone                       | Asia/Kolkata                                |
 Locale Country                 | IN                                          |
 Locale Language                | en                                          |
 Charset                        | UTF-8                                       |
 Schema RID                     | #0:1                                        |
 Index Manager RID              | #0:2                                        |
 Dictionary RID                 | null                                        |
--------------------------------+---------------------------------------------+

DATABASE CUSTOM PROPERTIES:
 +-------------------------------+--------------------------------------------+
 | NAME                          | VALUE                                      |
 +-------------------------------+--------------------------------------------+
 | strictSql                     | true                                       |
 +-------------------------------+--------------------------------------------+
CLUSTERS (collections)
---------------------------------+-------+-------------------+----------------+
 NAME                            | ID    | CONFLICT STRATEGY | RECORDS        |
---------------------------------+-------+-------------------+----------------+

OrientDB - List Database

本章介绍如何从 OrientDB 命令行获取实例中所有数据库的列表。

以下语句是 info 命令的基本语法。

LIST DATABASES

Note − 你只能在连接到本地或远程服务器后才能使用此命令。

Example

在检索数据库列表之前,我们必须通过远程服务器连接到本地主机服务器。需要提醒的是,连接到本地主机实例的用户名和密码分别是 guest 和 guest,这已在 orintdb/config/orientdb-server-config.xml 文件中配置。

可使用以下命令连接到 localhost 数据库服务器实例。

orientdb> connect remote:localhost guest

它将询问密码。根据配置文件,guest 的密码也是 guest。如果已成功连接,你将获得以下输出。

Connecting to remote Server instance [remote:localhost] with user 'guest'...OK
orientdb {server = remote:localhost/}>

连接到 localhost 数据库服务器后,可使用以下命令列出数据库。

orientdb {server = remote:localhost/}> list databases

如果已成功执行,你将获得以下输出:

Found 6 databases:
* demo (plocal)
* s2 (plocal)
* s1 (plocal)
* GratefulDeadConcerts (plocal)
* s3 (plocal)
* sample (plocal)
orientdb {server = remote:localhost/}>

OrientDB - Freeze Database

每当需要使数据库状态为静态时,这意味着数据库不对任何读、写操作做出响应的状态。简单来说,数据库处于冻结状态。

在本章中,你可以了解如何从 OrientDB 命令行冻结数据库。

以下语句是冻结数据库命令的基本语法。

FREEZE DATABASE

Note − 在连接到远程或本地数据库中特定数据库后,你才能使用此命令。

Example

在本示例中,我们将使用上一章中创建的同名数据库“demo”。我们将从 CLI 冻结此数据库。

可使用以下命令冻结数据库。

Orientdb {db = demo}> FREEZE DATABASE

如果已成功执行,你将获得以下输出。

Database 'demo' was frozen successfully

OrientDB - Release Database

在本章中,你可以了解如何通过 OrientDB 命令行使数据库从冻结状态中复原。

以下语句为复原数据库命令的基本语法。

RELEASE DATABASE

Note − 在连接到处于冻结状态的特定数据库后,你才能使用此命令。

Example

在本示例中,我们将使用上一章中创建的同名数据库“demo”。我们将解除上一章冻结的数据库。

可使用以下命令复原数据库。

Orientdb {db = demo}> RELEASE DATABASE

如果已成功执行,你将获得以下输出。

Database 'demo' was release successfully

OrientDB - Config Database

在本章中,你可以了解如何通过 OrientDB 命令行显示特定数据库的配置。此命令适用于本地和远程数据库。

配置信息包含已启用或未启用的默认缓存、该缓存的大小、负载因子值、映射的最大内存、节点页大小、池的最小和最大大小等。

以下语句是 config 数据库命令的基本语法。

CONFIG

Note − 您只能在连接到特定数据库后才能使用此命令。

Example

在本例中,我们将使用之前章节中创建的同名数据库“demo”。

您可以使用以下命令显示 demo 数据库的配置。

Orientdb {db = demo}> CONFIG

如果已成功执行,你将获得以下输出。

LOCAL SERVER CONFIGURATION:
+---------------------------------------+-------------------------+
| NAME                                  | VALUE                   |
+---------------------------------------+-------------------------+
| environment.dumpCfgAtStartup          | false                   |
| environment.concurrent                | true                    |
| environment.allowJVMShutdown          | true                    |
| script.pool.maxSize                   | 20                      |
| memory.useUnsafe                      | true                    |
| memory.directMemory.safeMode          | true                    |
| memory.directMemory.trackMode         | false                   |
|………………………………..                         |                         |
| storage.lowestFreeListBound           | 16                      |
| network.binary.debug                  | false                   |
| network.http.maxLength                | 1000000                 |
| network.http.charset                  | utf-8                   |
| network.http.jsonResponseError        | true                    |
| network.http.json                     | false                   |
| tx.log.fileType                       | classic                 |
| tx.log.synch                          | false                   |
| tx.autoRetry                          | 1                       |
| client.channel.minPool                | 1                       |
| storage.keepOpen                      | true                    |
| cache.local.enabled                   | true                    |
+---------------------------------------+-------------------------+
orientdb {db = demo}>

在以上列出的配置参数中,如果您希望更改任何参数值,可以直接使用命令行轻松地通过 config set 和 get 命令完成。

Config Set

您可以使用命令更新配置变量的值。

以下语句是 config set 命令的基本语法。

CONFIG SET <config-variable> <config-value>

Note − 您只能在连接到特定数据库后才能使用此命令。

Example

在本例中,我们将使用之前章节中创建的同名数据库“demo”。我们将把“tx.autoRetry”变量值修改为 5。

您可以使用以下命令设置 demo 数据库的配置。

orientdb {db = demo}> CONFIG SET tx.autoRetry 5

如果已成功执行,你将获得以下输出。

Local configuration value changed correctly

Config Get

您可以使用命令显示配置变量的值。

以下语句是 config get 命令的基本语法。

CONFIG GET <config-variable>

Note − 您只能在连接到特定数据库后才能使用此命令。

Example

在本例中,我们将使用之前章节中创建的同名数据库“demo”。我们将尝试检索“tx.autoRetry”变量的值。

您可以使用以下命令显示 demo 数据库的配置。

orientdb {db = demo}> CONFIG GET tx.autoRetry

如果已成功执行,你将获得以下输出。

Local configuration: tx.autoRetry = 5

OrientDB - Export Database

像 RDBMS 一样,OrientDB 也提供导出和导入数据库等功能。OrientDB 使用 JSON 格式导出数据。默认情况下,导出命令使用 GZIP 算法压缩文件。

在导出数据库期间,它不会锁定数据库,这意味着您可以对其执行并发读写操作。这也意味着您可以创建该数据的精确副本,因为并发读写操作。

在本章中,您可以了解如何从 OrientDB 命令行导出数据库。

以下语句是导出数据库命令的基本语法。

EXPORT DATABASE <output file>

Note − 您只能在连接到特定数据库后才能使用此命令。

Example

在本例中,我们将使用之前章节中创建的同名数据库“demo”。您可以使用以下命令将数据库导出到名为“export-demo”的文件中。

orientdb {db = demo}> EXPORT DATABASE ./export-demo.export

如果执行成功,它将基于操作系统创建一个名为“export-demo.zip”或“exportdemo.gz”的文件,您会看到以下输出。

Exporting current database to: DATABASE /home/linuxtp/Desktop/demo.export in
GZipped JSON format ...

Started export of database 'demo' to /home/linuxtp/Desktop/demo.export.gz...
Exporting database info...OK
Exporting clusters...OK (12 clusters)
Exporting schema...OK (11 classes)
Exporting records...
- Cluster 'internal' (id = 0)...OK (records = 3/3)
- Cluster 'index' (id = 1)...OK (records = 0/0)
- Cluster 'manindex' (id = 2)...OK (records = 0/0)
- Cluster 'default' (id = 3)...OK (records = 0/0)
- Cluster 'orole' (id = 4)...OK (records = 3/3)
- Cluster 'ouser' (id = 5)...OK (records = 3/3)
- Cluster 'ofunction' (id = 6)...OK (records = 0/0)
- Cluster 'oschedule' (id = 7)...OK (records = 0/0)
- Cluster 'orids' (id = 8)...OK (records = 0/0)
- Cluster 'v' (id = 9)...OK (records = 0/0)
- Cluster 'e' (id = 10)...OK (records = 0/0)
- Cluster '_studio' (id = 11)...OK (records = 1/1)

Done. Exported 10 of total 10 records

Exporting index info...
- Index dictionary...OK
- Index OUser.name...OK
- Index ORole.name...OK
OK (3 indexes)
Exporting manual indexes content...
- Exporting index dictionary ...OK (entries = 0)
OK (1 manual indexes)

Database export completed in 377ms

OrientDB - Import Database

您需要在导入数据库时使用由导出命令生成的导出 JSON 格式文件。

在本章中,您可以了解如何从 OrientDB 命令行导入数据库。

以下命令为导入数据库命令的基本语法。

IMPORT DATABASE <input file>

Note − 您只能在连接到特定数据库后才能使用此命令。

Example

在这个例子中,我们会使用上一章建立的,叫做“demo”的相同数据库。你可以使用以下命令,把数据库导入到名为“export-demo.gz”的文件里。

orientdb {db = demo}> IMPORT DATABASE ./export-demo.export.gz

如果成功运行,你会看到以下的输出以及成功通知。

Database import completed in 11612ms

OrientDB - Commit Database

与 RDBMS 相似,OrientDB 也提供了提交和回滚等事务概念。 Commit 指关闭事务,通过将所有更改保存到数据库。 Rollback 指恢复数据库状态到打开事务时的那个点。

以下命令为提交数据库命令的基本语法。

COMMIT

Note −您必须在连接到特定的数据库并且开始事务之后才能使用此命令。

Example

在这个例子中,我们会使用上一章建立的,叫做“demo”的相同数据库。我们将会看到提交事务的操作,以及通过事务储存记录。

首先,使用以下 BEGIN 命令开始事务。

orientdb {db = demo}> BEGIN

然后,使用以下命令,插入一条 id = 12 且 name = satish.P 的记录到 employee 表中。

orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')

您可以使用以下命令执行事务。

orientdb> commit

如果成功提交这个事务,你会看到以下的输出。

Transaction 2 has been committed in 4ms

OrientDB - Rollback Database

在本章中,你将学会如何通过 OrientDB 命令行界面,回滚尚未提交的事务。

以下命令为回滚数据库命令的基本语法。

ROLLBACK

Note −您必须在连接到特定的数据库并且开始事务之后才能使用此命令。

Example

在这个例子中,我们会使用上一章建立的,叫做“demo”的相同数据库。我们将会看到回滚事务的操作,以及通过事务储存记录。

首先,使用以下 BEGIN 命令开始事务。

orientdb {db = demo}> BEGIN

然后,使用以下命令,插入一条 id = 12 且 name = satish.P 的记录到 employee 表中。

orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')

你可以使用以下命令,从 Employee 表中检索记录。

orientdb> SELECT FROM employee WHERE name LIKE '%.P'

如果成功执行此命令,您将得到以下输出。

---+-------+--------------------
 # | ID   | name
---+-------+--------------------
 0 | 12   | satish.P
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).

你现在可以使用以下命令,来回滚这个事务。

orientdb> ROLLBACK

再次检查 select 查询,来从 employee 表中检索相同的记录。

orientdb> SELECT FROM employee WHERE name LIKE '%.P'

如果回滚成功执行,你会在输出中看到 0 条已找到的记录。

0 item(s) found. Query executed in 0.037 sec(s).

OrientDB - Optimize Database

根据技术术语, Optimization 意味着“在最短的时间内,达到最好的可能性能”。参照数据库,优化包含最大化数据检索的速度和效率。

OrientDB 支持轻量级边,即数据实体之间的直接关系。简单来说,它是一种字段到字段的关系。OrientDB 提供了优化数据库的不同方式。它支持将常规边转换为轻量级边。

以下命令为优化数据库命令的基本语法。

OPTMIZE DATABASE [-lwedges] [-noverbose]

lwedges 将常规节点转化为轻量级节点和 noverbose 禁用输出。

Example

在这个例子中,我们将使用与前一章节中创建的同名的数据库“demo”。您可以使用下列优化数据库命令。

OPTIMIZE DATABASE -lwedges

如果成功执行,您会得到一些成功通知以及完成消息。

Database Optimization completed in 35ms

OrientDB - Drop Database

类似于 RDBMS,OrientDB 提供了删除数据库的功能。 Drop database 指的是彻底删除一个数据库。

下列陈述是删除数据库命令的基本语法。

DROP DATABASE [<database-name> <server-username> <server-user-password>]

以下是上文中选项的详细信息。

<database-name> − 您想要删除的数据库名称。

<server-username> − 拥有删除数据库权限的数据库的用户名。

<server-user-password> − 指定用户的密码。

Example

有两种删除数据库的方法,一种是删除当前已打开的数据库,另一种是通过提供特定名称来删除特定数据库。

在此示例中,我们将使用此前章节中创建的同名数据库“demo”。您可以使用以下命令来删除数据库 demo

orientdb {db = demo}> DROP DATABASE

如果这个命令成功执行,您将得到以下输出。

Database 'demo' deleted successfully

您可以使用另一个命令来删除数据库,如下所示。

orientdb> DROP DATABASE PLOCAL:/opt/orientdb/databases/demo admin admin

如果这个命令成功执行,您将得到以下输出。

Database 'demo' deleted successfully

OrientDB - Insert Record

OrientDB 是一个 NoSQL 数据库,可以存储文档和面向图的数据。NoSQL 数据库不包含任何表,那么您如何才能作为记录来插入数据。在此,您可以看到以类、特性、顶点和边的形式存在的表数据,这意味着类类似于表,而特性类似于文件。

我们可以在 OrientDB 中使用 schema 来定义所有这些实体。可以将属性数据插入到一个类中。Insert 命令在数据库模式中创建一个新记录。记录可以无模式或遵循一些指定的规则。

以下是插入记录命令的基本语法。

INSERT INTO [class:]<class>|cluster:<cluster>|index:<index>
   [(<field>[,]*) VALUES (<expression>[,]*)[,]*]|
   [SET <field> = <expression>|<sub-command>[,]*]|
   [CONTENT {<JSON>}]
   [RETURN <expression>]
   [FROM <query>]

以下是上文中选项的详细信息。

SET − 为每个字段定义关联值。

CONTENT − 定义用于设置字段值的 JSON 数据。这是可选的。

RETURN − 定义要返回内容(而不是插入的记录数量)的表达式。最常见的用例为 −

  1. @rid − 返回新记录的记录 ID。

  2. @this – 返回整个新记录。

FROM – 要插入记录或结果集的位置。

Example

我们考虑一个具有以下字段和类型的 Customer 表。

Sr.No.

Field Name

Type

1

Id

Integer

2

Name

String

3

Age

Integer

您可以通过执行以下命令来创建架构(表)。

CREATE DATABASE PLOCAL:/opt/orientdb/databases/sales
CREATE CLASS Customer
CREATE PROPERTY Customer.id integer
CREATE PROPERTY Customer.name String
CREATE PROPERTY Customer.age integer

执行所有命令后,您将获得具有 id、name 和 age 字段的表名 Customer。您可以通过在 Customer 表中执行选择查询来检查表。

OrientDB 提供了不同的方式来插入记录。考虑以下包含示例记录的 Customer 表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

29

以下命令是将第一条记录插入 Customer 表。

INSERT INTO Customer (id, name, age) VALUES (01,'satish', 25)

如果上述命令已成功执行,您将获得以下输出。

Inserted record 'Customer#11:0{id:1,name:satish,age:25} v1' in 0.069000 sec(s).

以下命令是将第二条记录插入 Customer 表。

INSERT INTO Customer SET id = 02, name = 'krishna', age = 26

如果上述命令已成功执行,您将获得以下输出。

Inserted record 'Customer#11:1{id:2,age:26,name:krishna} v1' in 0.005000 sec(s).

以下命令是将第三条记录插入 Customer 表。

INSERT INTO Customer CONTENT {"id": "03", "name": "kiran", "age": "29"}

如果上述命令已成功执行,您将获得以下输出。

Inserted record 'Customer#11:2{id:3,name:kiran,age:29} v1' in 0.004000 sec(s).

以下命令是将接下来的两条记录插入 Customer 表。

INSERT INTO Customer (id, name, age) VALUES (04,'javeed', 21), (05,'raja', 29)

如果上述命令已成功执行,您将获得以下输出。

Inserted record '[Customer#11:3{id:4,name:javeed,age:21} v1,
Customer#11:4{id:5,name:raja,age:29} v1]' in 0.007000 sec(s).

您可以通过执行以下命令来检查是否已插入所有这些记录。

SELECT FROM Customer

如果上述命令已成功执行,您将获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:1|Customer|2   |krishna|26
2   |#11:2|Customer|3   |kiran  |29
3   |#11:3|Customer|4   |javeed |21
4   |#11:4|Customer|5   |raja   |29
----+-----+--------+----+-------+----

OrientDB - Display Records

类似于 RDBMS,OrientDB 支持不同的 SQL 查询类型以从数据库中检索记录。在检索记录时,我们有不同的查询变体或选项以及 select 语句。

以下语句是 SELECT 命令的基本语法。

SELECT [ <Projections> ] [ FROM <Target> [ LET <Assignment>* ] ]
   [ WHERE <Condition>* ]
   [ GROUP BY <Field>* ]
   [ ORDER BY <Fields>* [ ASC|DESC ] * ]
   [ UNWIND <Field>* ]
   [ SKIP <SkipRecords> ]
   [ LIMIT <MaxRecords> ]
   [ FETCHPLAN <FetchPlan> ]
   [ TIMEOUT <Timeout> [ <STRATEGY> ] ]
   [ LOCK default|record ]
   [ PARALLEL ]
   [ NOCACHE ]

以下是上文中选项的详细信息。

<Projections> - 指示您希望从查询中提取作为结果记录集的数据。

FROM - 表示要查询的对象。这可以是类、集群、单个记录 ID、记录 ID 集合。您可以将所有这些对象指定为目标。

WHERE - 指定用于过滤结果集的条件。

LET - 表示用于投影、条件或子查询的上下文变量。

GROUP BY - 表示用于对记录进行分组的字段。

ORDER BY - 表示用于按顺序排列记录的文件。

UNWIND - 指定用于解开记录集合的字段。

SKIP - 定义从结果集开始要跳过的记录数。

LIMIT - 表示结果集中记录的最大数量。

FETCHPLAN - 指定定义如何获取结果的策略。

TIMEOUT - 定义查询的最大时间(以毫秒为单位)。

LOCK - 定义锁定策略。DEFAULT 和 RECORD 是可用的锁定策略。

PARALLEL - 执行针对“x”个并发线程的查询。

NOCACHE − 定义是否要使用缓存。

Example

让我们考虑一下上一章中创建的以下 Customer 表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

29

尝试不同的 select 查询以从 Customer 表中检索数据记录。

Method 1 − 您可以使用以下查询从 Customer 表中选择所有记录。

orientdb {db = demo}> SELECT FROM Customer

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:1|Customer|2   |krishna|26
2   |#11:2|Customer|3   |kiran  |29
3   |#11:3|Customer|4   |javeed |21
4   |#11:4|Customer|5   |raja   |29
----+-----+--------+----+-------+----

Method 2 − 选择所有名称以字母“ k ”开头的记录。

orientdb {db = demo}> SELECT FROM Customer WHERE name LIKE 'k%'

或者您可以对上述示例使用以下查询。

orientdb {db = demo}> SELECT FROM Customer WHERE name.left(1) = 'k'

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:1|Customer|2   |krishna|26
1   |#11:2|Customer|3   |kiran  |29
----+-----+--------+----+-------+----

Method 3 − 从 Customer 表中选择 id、name 记录,这些记录中的名称为大写字母。

orientdb {db = demo}> SELECT id, name.toUpperCase() FROM Customer

如果成功执行了以上查询,您会获得以下输出。

----+--------+----+-------
#   |@CLASS  |id  |name
----+--------+----+-------
0   |null    |1   |SATISH
1   |null    |2   |KRISHNA
2   |null    |3   |KIRAN
3   |null    |4   |JAVEED
4   |null    |5   |RAJA
----+--------+----+-------

Method 4 − 从 Customer 表中选择所有记录,其中年龄在 25 至 29 岁之间。

orientdb {db = demo}> SELECT FROM Customer WHERE age in [25,29]

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:2|Customer|3   |kiran  |29
2   |#11:4|Customer|5   |raja   |29
----+-----+--------+----+-------+----

Method 5 − 从 Customer 表中选择所有记录,其中任何字段都包含单词“sh”。

orientdb {db = demo}> SELECT FROM Customer WHERE ANY() LIKE '%sh%'

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:1|Customer|2   |krishna|26
----+-----+--------+----+-------+----

Method 6 − 从 Customer 表中选择按年龄降序排列的所有记录。

orientdb {db = demo}> SELECT FROM Customer ORDER BY age DESC

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:2|Customer|3   |kiran  |29
1   |#11:4|Customer|5   |raja   |29
2   |#11:1|Customer|2   |krishna|26
3   |#11:0|Customer|1   |satish |25
4   |#11:3|Customer|4   |javeed |21
----+-----+--------+----+-------+----

OrientDB - Load Record

Load Record 用于从架构中加载特定记录。加载记录会借助记录 ID 加载记录。它在结果集中用 @rid 符号表示。

以下语句是 LOAD 记录命令的基本语法。

LOAD RECORD <record-id>

其中 <record-id> 定义要加载的记录的记录 id。

如果您不知道特定记录的记录 ID,则可以在表上执行任何查询。在结果集中,您会找到相应记录的记录 ID (@rid)。

Example

我们考虑我们在前几章中使用的同一个 Customer 表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

29

尝试以下查询以检索具有记录 ID @rid: #11:0 的记录。

orientdb {db = demo}> LOAD RECORD #11:0

如果成功执行了以上查询,您会获得以下输出。

+---------------------------------------------------------------------------+
| Document - @class: Customer        @rid: #11:0           @version: 1      |
+---------------------------------------------------------------------------+
|                     Name | Value                                          |
+---------------------------------------------------------------------------+
|                       id | 1                                              |
|                     name | satish                                         |
|                      age | 25                                             |
+---------------------------------------------------------------------------+

OrientDB - Reload Record

Reload Record 与加载记录命令类似,也用于从架构中加载特定记录。加载记录会借助记录 ID 加载记录。它在结果集中用 @rid 符号表示。主要区别在于重新加载记录会忽略缓存,当应用外部并发事务更改记录时,这非常有用。它会提供最新更新。

以下语句是重新加载记录命令的基本语法。

RELOAD RECORD <record-id>

其中 <record-id> 定义您要重新加载的记录的记录 ID。

如果您不知道特定记录的记录 ID,则可以在表上执行任何查询。在结果集中,您会找到相应记录的记录 ID (@rid)。

Example

让我们考虑我们在上一章中使用的相同的客户表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

29

尝试以下查询以检索具有记录 ID @rid: #11:0 的记录。

orientdb {db = demo}> LOAD RECORD #11:0

如果成功执行了以上查询,您会获得以下输出。

+---------------------------------------------------------------------------+
| Document - @class: Customer        @rid: #11:0           @version: 1      |
+---------------------------------------------------------------------------+
|                     Name | Value                                          |
+---------------------------------------------------------------------------+
|                       id | 1                                              |
|                     name | satish                                         |
|                      age | 25                                             |
+---------------------------------------------------------------------------+

OrientDB - Export Record

Export Record 是用于将加载的记录导出到请求和支持的格式的命令。如果您执行任何错误的语法,它都会提供支持的格式列表。OrientDB 是一系列文档数据库,因此 JSON 是默认支持的格式。

以下语句是导出记录命令的基本语法。

EXPORT RECORD <format>

其中 <Format> 定义您要获取记录的格式。

Note - 导出命令将根据记录 ID 导出加载的记录。

Example

让我们考虑我们在上一章中使用的相同的客户表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

29

尝试以下查询以检索具有记录 ID @rid: #11:0 的记录。

orientdb {db = demo}> LOAD RECORD #11:0

如果成功执行了以上查询,您会获得以下输出。

+---------------------------------------------------------------------------+
| Document - @class: Customer        @rid: #11:0           @version: 1      |
+---------------------------------------------------------------------------+
|                     Name | Value                                          |
+---------------------------------------------------------------------------+
|                       id | 1                                              |
|                     name | satish                                         |
|                      age | 25                                             |
+---------------------------------------------------------------------------+

使用以下查询以 JSON 格式导出加载的记录 (#11:0)。

orientdb {db = demo}> EXPORT RECORD json

如果成功执行了以上查询,您会获得以下输出。

{
   "@type": "d",
      "@rid": "#11:0",
   "@version": 1,
   "@class": "Customer",
      "id": 1,
      "name": "satish",
      "age": 25
}

OrientDB - Update Record

Update Record 命令用来修改某个特定记录的值。SET 是更新某个特定字段值的基本命令。

以下语句是更新命令的基本语法。

UPDATE <class>|cluster:<cluster>|<recordID>
   [SET|INCREMENT|ADD|REMOVE|PUT <field-name> = <field-value>[,]*] |[CONTENT| MERGE <JSON>]
   [UPSERT]
   [RETURN <returning> [<returning-expression>]]
   [WHERE <conditions>]
   [LOCK default|record]
   [LIMIT <max-records>] [TIMEOUT <timeout>]

以下是上文中选项的详细信息。

SET - 定义要更新的字段。

INCREMENT - 通过给定值递增指定字段值。

ADD - 在集合字段中添加新项。

REMOVE - 从集合字段中移除一项。

PUT - 向映射字段中输入一项。

CONTENT - 用 JSON 文档内容替换记录内容。

MERGE - 用 JSON 文档合并记录内容。

LOCK - 指定如何在加载和更新之间锁定记录。我们有两个选项来指定 DefaultRecord

UPSERT - 如果记录存在则更新,如果不存在则插入新记录。它有助于执行单个查询来代替执行两个查询。

RETURN − 指定要在记录数量中返回的表达式。

LIMIT − 定义要更新的最大记录数量。

TIMEOUT − 定义在超时前允许更新运行的时间。

Example

让我们考虑我们在上一章中使用的相同的客户表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

29

尝试使用以下查询以更新名为“Raja”的客户的年龄。

Orientdb {db = demo}> UPDATE Customer SET age = 28 WHERE name = 'Raja'

如果成功执行了以上查询,您会获得以下输出。

Updated 1 record(s) in 0.008000 sec(s).

要检查客户表中的记录,可以使用以下查询。

orientdb {db = demo}> SELECT FROM Customer

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:1|Customer|2   |krishna|26
2   |#11:2|Customer|3   |kiran  |29
3   |#11:3|Customer|4   |javeed |21
4   |#11:4|Customer|5   |raja   |28
----+-----+--------+----+-------+----

OrientDB - Truncate Record

Truncate Record 命令用于删除特定记录的值。

以下语句是截断命令的基本语法。

TRUNCATE RECORD <rid>*

其中 <rid> * 表示要截断的记录 ID。可以使用多个 Rids 并用逗号分隔它们来截断多个记录。它返回截断的记录数。

Example

让我们考虑我们在上一章中使用的相同的客户表。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

5

Raja

28

尝试使用以下查询来截断记录 ID 为 #11:4 的记录。

Orientdb {db = demo}> TRUNCATE RECORD #11:4

如果成功执行了以上查询,您会获得以下输出。

Truncated 1 record(s) in 0.008000 sec(s).

要检查客户表中的记录,可以使用以下查询。

Orientdb {db = demo}> SELECT FROM Customer

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:1|Customer|2   |krishna|26
2   |#11:2|Customer|3   |kiran  |29
3   |#11:3|Customer|4   |javeed |21
----+-----+--------+----+-------+----

OrientDB - Delete Record

Delete Record 命令用于从数据库中完全删除一个或多个记录。

以下语句是删除命令的基本语法。

DELETE FROM <Class>|cluster:<cluster>|index:<index>
   [LOCK <default|record>]
   [RETURN <returning>]
   [WHERE <Condition>*]
   [LIMIT <MaxRecords>]
   [TIMEOUT <timeout>]

以下是上文中选项的详细信息。

LOCK - 指定如何在加载和更新之间锁定记录。我们有两个选项来指定 DefaultRecord

RETURN − 指定要在记录数量中返回的表达式。

LIMIT − 定义要更新的最大记录数量。

TIMEOUT − 定义在超时前允许更新运行的时间。

Note − 不要使用 DELETE 删除点或边,因为它会影响图表的完整性。

Example

我们以客户表为例。

Sr.No.

Name

Age

1

Satish

25

2

Krishna

26

3

Kiran

29

4

Javeed

21

尝试使用以下查询来删除 id = 4 的记录。

orientdb {db = demo}> DELETE FROM Customer WHERE id = 4

如果成功执行了以上查询,您会获得以下输出。

Delete 1 record(s) in 0.008000 sec(s).

要检查客户表中的记录,可以使用以下查询。

Orientdb {db = demo}> SELECT FROM Customer

如果成功执行了以上查询,您会获得以下输出。

----+-----+--------+----+-------+----
#   |@RID |@CLASS  |id  |name   |age
----+-----+--------+----+-------+----
0   |#11:0|Customer|1   |satish |25
1   |#11:1|Customer|2   |krishna|26
2   |#11:2|Customer|3   |kiran  |29
----+-----+--------+----+-------+----

OrientDB - Create Class

OrientDB 支持多模型功能,并提供不同的方法来理解和了解数据库的基本概念。然而,我们可以轻松访问这些模型,从文档数据库 API 的角度来看。与 RDBMS 类似,OrientDB 也使用 Record 作为存储元素,但它使用 Document 类型。文档以键值对的形式存储。我们将字段和属性存储为属于概念类的键值对。

Class 是一种数据模型,这种概念取自面向对象编程模式。基于传统的文档数据库模型,数据以集合的形式存储,而在关系数据库模型中,数据存储在表中。OrientDB 遵循文档 API 和 OPPS 模式。作为一个概念,OrientDB 中的类与关系数据库中的表有最密切的关系,但是(与表不同)类可以无模式、全模式或混合。类可以从其他类继承,创建类树。每个类都有自己的集群或多个集群(如果未定义,则默认创建)。

以下语句是 Create Class Command 的基本语法。

CREATE CLASS <class>
[EXTENDS <super-class>]
[CLUSTER <cluster-id>*]
[CLUSTERS <total-cluster-number>]
[ABSTRACT]

以下是上文中选项的详细信息。

<class> − 定义要创建的类的名称。

<super-class> − 定义要使用此类扩展的超类。

<total-cluster-number> − 定义此类中使用的集群总数。默认值为 1。

ABSTARCT − 定义类是抽象的。此为可选。

Example

如前所述,类是一个与表相关的概念。因此,这里我们将创建一个表 Account。但是,在创建类时,我们无法定义字段,即基于 OOPS 模式的属性。

以下命令用于创建一个名为 Account 的类。

orientdb> CREATE CLASS Account

如果上述命令执行成功,您将获得以下输出内容。

Class created successfully

您可以使用以下命令来创建一个 Car 类,该类扩展至 Vehicle 类。

orientdb> CREATE CLASS Car EXTENDS Vehicle

如果上述命令执行成功,您将获得以下输出内容。

Class created successfully

您可以使用以下命令来创建一个抽象 Person 类。

orientdb> CREATE CLASS Person ABSTRACT

如果上述命令执行成功,您将获得以下输出内容。

Class created successfully

Note − 在没有属性的情况下,该类是无用的并且无法构建实际对象。在后面的章节中,您可以学习如何为特定类创建属性。

OrientDB - Alter Class

OrientDB 中的类和属性用于构建架构,其中包含不同的属性,例如类名、超类、集群、集群数、抽象等。如果您想修改或更新架构中现有类的任何属性,则必须使用 Alter Class 命令。

以下语句是 Alter Class 命令的基本语法。

ALTER CLASS <class> <attribute-name> <attribute-value>

以下是上文中选项的详细信息。

<class> − 定义类名。

<attribute-name> − 定义您想要更改的属性。

<attribute-value> − 定义想要为该属性设置的值。

下表定义了支持 Alter Class 命令的属性列表。

Attribute

Type

Description

NAME

String

Changes the class name.

SHORTNAME

String

为类定义一个短名称(即别名)。使用 NULL 删除短名称分配。

SUPERCLASS

String

为类定义超类。要添加一个新类,您可以使用语法 +<class>,要删除它,请使用 -<class>。

OVERSIZE

Decimal number

Defines the oversize factor.

ADDCLUSTER

String

将集群添加到类中。如果集群不存在,它将创建一个物理集群。将集群添加到类中也有助于将记录存储在分布式服务器中。

REMOVECLUSTER

String

从类中删除集群。它不会删除集群,只会将它从类中删除。

STRICTMODE

-

启用或禁用严格模式。处于严格模式时,您将以模式全模式工作,并且如果属性是类模式定义的一部分,则无法向记录中添加新属性。

CLUSTERSELECTION

-

定义在选择用于新记录的集群时采用的选择策略。

CUSTOM

-

定义自定义属性。属性名称和值必须遵循语法 <propertyname>=<value>,名称和值之间没有空格。

ABSTRACT

Boolean

将类转换为抽象类或相反。

Example

让我们尝试一些将更新或修改现有类的属性的示例。

以下查询用于为现有类“Employee”定义超类“Person”。

orientdb> ALTER CLASS Employee SUPERCLASS Person

如果成功执行了以上查询,您会获得以下输出。

Class altered successfully

以下查询用于为现有类“Employee”添加超类“Person”。

orientdb> ALTER CLASS Employee SUPERCLASS +Person

如果成功执行了以上查询,您会获得以下输出。

Class altered successfully

OrientDB - Truncate Class

Truncate class 将删除作为类一部分定义的群集的所有记录。在 OrientDB 中,每个类都有一个关联的群集,名称相同。如果您还想要从类层次结构中删除所有记录,您需要使用 POLYMORPHIC 关键字。

以下是 Truncate Class 命令的基本语法。

TRUNCATE CLASS <class> [ POLYMORPHIC ] [ UNSAFE ]

以下是上文中选项的详细信息。

<class> −定义您想要截断的类。

POLYMORPHIC −定义此命令是否还截断了层次结构。

UNSAFE - 定义了命令强制对顶点或边类执行截断。

Example

以下查询将截断类 Profile

orientdb> TRUNCATE CLASS Profile

如果成功执行了以上查询,您会获得以下输出。

Class truncated successfully

OrientDB - Drop Class

Drop Class 命令从模式中删除一个类。注意并维护一个一致的模式非常重要。例如,避免删除其他类的超类。关联的集群不会被删除。

以下是 Drop Class 命令的基本语法。

DROP CLASS <class>

通过类名称删除一个类。

Example

尝试以下查询来删除类 Employee。

Orientdb> DROP CLASS Employee

如果成功执行了以上查询,您会获得以下输出。

Class dropped successfully

OrientDB - Create Cluster

Cluster 是 OrientDB 中的一个重要概念,用于存储记录、文档或顶点。简单来说,集群是一个存储一组记录的地方。默认情况下,OrientDB 将为每个类创建一个集群。某个类的所有记录都存储在同一个集群中,该集群具有与该类相同名称。可以在数据库中创建多达 32767(2^15-1)个集群。

CREATE class 是一个用于创建特定名称集群的命令。创建集群后,您可以在创建任何数据模型期间指定名称,使用集群来保存记录。如果您想向类中添加一个新集群,请使用 Alter Class 命令和 ADDCLUSTER 命令。

以下语句是 Create Cluster 命令的基本语法。

CREATE CLUSTER <cluster> [ID <cluster-id>]

其中 <cluster> 定义所要创建的集群的名称, <cluster-id> 定义所要用于该集群的数字 ID。

下表提供了集群选取策略列表。

Sr.No.

Strategy & Description

1

Default 使用类属性默认的 ClusterId 选取集群。

2

Round-robin 以循环顺序选取下一个集群。完成后重新启动。

3

Balanced 选取最小的集群。该类允许基于大小让所有底层集群保持平衡。向现有类添加新集群时,先填充新集群。

Example

让我们通过一个示例来创建名为 sales 的集群。

orientdb> CREATE CLUSTER sales

如果成功执行了以上查询,您会获得以下输出。

Cluster created correctly with id #12

OrientDB - Alter Cluster

Alter Cluster 命令用于更新现有集群上的属性。在本部分中,您可以了解如何添加或修改集群的属性。

以下语句是 Alter Cluster 命令的基本语法。

ALTER CLUSTER <cluster> <attribute-name> <attribute-value>

以下是上文中选项的详细信息。

<cluster> − 定义集群名称。

<attribute-name> − 定义您想要更改的属性。

<attribute-value> − 定义所要为该属性设置的值。

以下表格格式提供了您可与 Alter cluster 命令一起使用的受支持属性列表。

Name

Type

Description

NAME

String

Changes the cluster name.

STATUS

String

更改集群状态。允许的值是 ONLINE 和 OFFLINE。默认情况下,集群是联机的。

COMPRESSION

String

定义所要使用的压缩类型。允许的值是 NOTHING、SNAPPY、GZIP 和 OCompressionFactory 类中注册的任何其他压缩类型。

USE_WAL

Boolean

定义当 OrientDB 对该集群执行操作时是否使用日记。

RECORD_GROW_FACTO R

Integer

定义在创建记录时为节省更多空间而使用的增长因子。在使用其他信息更新记录时,您可能会发现它非常有用。

RECORD_OVERFLOW_GR OW_FACTOR

Integer

在更新时定义增长因子。当它达到大小限制时,使用此设置以获取更多空间(因子 > 1)。

CONFLICTSTRATEGY

String

定义在 OrientDB MVCC 对旧记录执行更新或删除操作时,它使用来处理冲突的策略。

下表提供了冲突策略列表。

Sr.No.

Strategy & Description

1

Version 版本不同时引发异常。这是默认设置。

2

Content 如果版本不同,它会检查内容的变化,否则它将使用最高版本来避免引发异常。

3

Automerge Merges the changes.

Example

尝试以下示例查询以学习 Alter cluster 命令。

执行以下命令以将群集名称从 Employee 更改为 Employee2。

orientdb {db = demo}> ALTER CLUSTER Employee NAME Employee2

如果上述命令执行成功,您将获得以下输出内容。

Cluster updated successfully

执行以下命令以使用群集 ID 将群集名称从 Employee2 更改为 Employee。

orientdb {db = demo}> ALTER CLUSTER 12 NAME Employee

如果上述命令执行成功,您将获得以下输出内容。

Cluster updated successfully

执行以下命令以将群集冲突策略更改为自动合并。

orientdb {db = demo}> ALTER CLUSTER V CONFICTSTRATEGY automerge

如果上述命令执行成功,您将获得以下输出内容。

Cluster updated successfully

OrientDB - Truncate Cluster

Truncate Cluster 命令将删除群集的所有记录。

以下语句是 Truncate Cluster 命令的基本语法。

TRUNCATE CLUSTER <cluster-name>

其中 <cluster-name> 是群集的名称。

Example

尝试以下查询来截断名为销售的群集。

Orientdb {db = demo}> TRUNCATE CLUSTER Profile

如果成功执行了以上查询,您会获得以下输出。

Cluster truncated successfully.

OrientDB - Drop Cluster

Drop Cluster 命令将删除群集及其所有相关内容。此操作是永久性的并回滚。

以下语句是 Drop Cluster 命令的基本语法。

DROP CLUSTER <cluster-name>|<cluster-id>

其中 <cluster-name> 定义要删除的群集的名称, <cluster-id> 定义要删除的群集的 ID。

Example

尝试以下命令以删除 Sales 群集。

orientdb> DROP CLUSTER Sales

如果成功执行了以上查询,您会获得以下输出。

Cluster dropped successfully

OrientDB - Create Property

OrientDB 中的 Property 类似于数据库表中的类字段和列。创建属性是一个用于为特定类创建属性的命令。您在命令中使用的类名称必须存在。

以下语句是 Create Property 命令的基本语法。

CREATE PROPERTY <class-name>.<property-name> <property-type> [<linked-type>][ <linked-class>]

以下是上文中选项的详细信息。

<class-name> − 定义要为其创建属性的类。

<property-name> − 定义属性的逻辑名称。

<property-type> − 定义要创建的属性类型。

<linked-type> − 定义容器类型,用于容器属性类型。

<linked-class> − 定义容器类,用于容器属性类型。

下表为属性提供数据类型,以便 OrientDB 知道要存储的数据类型。

BOOLEAN

INTEGER

SHORT

LONG

FLOAT

DATE

STRING

EMBEDDED

LINK

BYTE

BINARY

DOUBLE

除了这些之外,还有几个其他作为容器的属性类型。

EMBEDDEDLIST

EMBEDDEDSET

EMBEDDEDMAP

LINKLIST

LINKSET

LINKMAP

Example

尝试使用以下示例在类型为 String 的类 Employee 上创建属性名称。

orientdb> CREATE PROPERTY Employee.name STRING

如果成功执行了以上查询,您会获得以下输出。

Property created successfully with id = 1

OrientDB - Alter Property

Alter Property 是用来修改或更新特定类的属性的命令。更改属性表示修改表中的字段。在本章中,你可以了解如何更新属性。

以下语句是 Alter Property 命令的基本语法。

ALTER PROPERTY <class>.<property> <attribute-name> <attribute-value>

以下是上文中选项的详细信息。

<class> − 定义属性所属的类。

<property> − 定义要更新的属性。

<attribute-name> − 定义要更新的属性的属性。

<attribute-value> − 定义要设置在属性上的值。

下表定义了用于更改属性的属性列表。

Attribute

Type

Description

LINKEDCLASS

String

定义链接的类名称。使用 NULL 删除现有值。

LINKEDTYPE

String

定义链接类型。使用 NULL 删除现有值。

MIN

Integer

定义最小值作为约束。使用 NULL 删除现有约束。

MANDATORY

Boolean

定义属性是否需要值。

MAX

Integer

定义最大值作为约束。使用 NULL 删除现有约束。

NAME

String

Defines the property name.

NOTNULL

Boolean

定义属性是否可以具有 NULL 值。

REGEX

String

定义正则表达式的作为约束。使用 NULL 删除现有约束。

TYPE

String

Defines a property type.

COLLATE

String

Sets 归类到一个已定义的比较策略。默认情况下,它设置为区分大小写 (cs)。你还可以将其设置为不区分大小写 (ci)。

READONLY

Boolean

定义属性值是否不可变。也就是说,是否可以在首次分配之后更改它。与 DEFAULT 结合使用,可在创建时具有不可变值。

CUSTOM

String

定义自定义属性。自定义属性的语法为 <custom-name> = <custom-value>,比如 stereotype = icon。

DEFAULT

定义默认值或函数。

Note - 如果要更改 NAME 或 TYPE,则此命令将根据数据量花费一些时间进行更新。

Example

尝试一些下面给出的查询来理解 Alter 属性。

执行以下查询,将 Customer 类中属性的名称从“age”更改为“born”。

orinetdb {db = demo}> ALTER PROPERTY Customer.age NAME born

如果成功执行了以上查询,您会获得以下输出。

Property altered successfully

执行以下查询,将“name”设为类“Customer”的强制属性。

orientdb {db = demo}> ALTER PROPERTY Customer.name MANDATORY TRUE

如果成功执行了以上查询,您会获得以下输出。

Property altered successfully

OrientDB - Drop Property

Drop property 命令从模式中删除属性。它不会从记录中删除属性值,只会更改模式。

以下语句是 Drop Property 命令的基本语法。

DROP PROPERTY <class>.<property> [FORCE]

以下是上文中选项的详细信息。

<class> - 定义属性所在类。

<property> - 定义要删除的属性。

[Force] - 如果在属性上定义了一个或多个索引。

Example

尝试以下命令从类“Customer”中删除“age”属性。

orientdb> DROP PROPERTY Customer.age

如果上述命令执行成功,您将获得以下输出内容。

Property dropped successfully

OrientDB - Create Vertex

OrientDB 数据库不仅是文档数据库,还是图形数据库。新概念(如顶点和边)用于以图形形式存储数据。它对顶点应用多态性。顶点的基类是 V。

在本教程中,您可以了解如何创建顶点来存储图形数据。

以下是 Create Vertex Command 的基本语法。

CREATE VERTEX [<class>] [CLUSTER <cluster>] [SET <field> = <expression>[,]*]

以下是上文中选项的详细信息。

<class> − 定义顶点所属的类。

<cluster> −定义存储顶点的群集。

<field> −定义希望设置的字段。

<expression> −定义要为该字段设置的表达式。

Example

尝试以下示例来了解如何创建顶点。

执行以下查询来创建不带“name”且在基本类 V 上的顶点。

orientdb> CREATE VERTEX

如果成功执行了以上查询,您会获得以下输出。

Created vertex 'V#9:0 v1' in 0.118000 sec(s)

执行以下查询创建一个名为 v1 的新顶点类,然后在该类中创建顶点。

orientdb> CREATE CLASS V1 EXTENDS V
orientdb> CREATE VERTEX V1

如果成功执行了以上查询,您会获得以下输出。

Created vertex 'V1#14:0 v1' in 0.004000 sec(s)

执行以下查询创建一个名为 v1 的类的新顶点,定义其属性,例如 brand = 'Maruti' 和 name = 'Swift'。

orientdb> CREATE VERTEX V1 SET brand = 'maruti', name = 'swift'

如果成功执行了以上查询,您会获得以下输出。

Created vertex 'V1#14:1{brand:maruti,name:swift} v1' in 0.004000 sec(s)

OrientDB - Move Vertex

OrientDB 中的移动顶点命令是将一个或多个顶点从当前位置移动到不同的类或集群。如果你将移动命令应用于特定顶点,则它将更新连接到此顶点的所有边。如果你指定一个集群来移动顶点,则它会将顶点移动到目标集群的所有者服务器。

以下语句是 Move Vertex 命令的基本语法。

MOVE VERTEX <source> TO <destination>
[SET [<field>=<value>]* [,]]
[MERGE <JSON>]
[BATCH <batch-size>]

以下是上文中选项的详细信息。

<source> - 定义要移动的顶点。它接受特定顶点的记录 ID 或顶点的记录 ID 数组。

<destination> - 定义要将顶点移动到哪里。它将类或集群作为目的地。

SET - 向字段设置值。

MERGE − 通过 JSON 设置字段的值。

BATCH − 定义批处理大小。

Note − 此命令更新所有已连接的边,但不更新链接。在使用图 API 时,建议使用连到顶点的边。

Example

尝试以下示例来了解如何移动顶点。

执行以下查询,将记录 ID 为 #11:2 的单个顶点从当前位置移到员工类别。

orientdb> MOVE VERTEX #11:2 TO CLASS:Employee

如果以上查询执行成功,您将获得以下输出 −

Move vertex command executed with result '[{old:#11:2, new:#13:0}]' in 0.022000 sec(s)

执行以下查询,将一组顶点从“客户”类别移到“员工”类别。

orientdb> MOVE VERTEX (SELECT FROM Customer) TO CLASS:Employee

如果成功执行了以上查询,您会获得以下输出。

Move vertex command executed with result '[{old:#11:0,
new:#13:1},{old:#11:1, new:#13:2},{old:#11:2, new:#13:3}]' in 0.011000 sec(s)

OrientDB - Delete Vertex

Delete Vertex 命令用于从数据库中删除顶点。在删除时,它将检查并维护与边的连贯性,并删除指向已删除顶点的所有交叉引用(与边)。

以下语句是删除顶点命令的基本语法。

DELETE VERTEX <vertex> [WHERE <conditions>]
[LIMIT <MaxRecords>>] [BATCH <batch-size>]

以下是上文中选项的详细信息。

<vertex> - 使用类、记录 ID 或子查询定义要删除的顶点。

WHERE - 过滤条件,用于确定命令删除哪些记录。

LIMIT - 定义要删除的最大记录数。

BATCH - 定义命令一次删除多少条记录,允许将大事务分解成小块,以节省内存使用量。

Example

试试以下命令来学习如何删除单个顶点或多个顶点。

执行以下命令,删除顶点 ‘#14:1’。

orientdb> DELETE VERTEX #14:1

如果上述命令执行成功,您将获得以下输出内容。

Delete record(s) '1' in 0.005000 sec(s)

执行以下命令,删除所有标记为 ‘isSpam’ 属性的类 ‘Customer’ 中的顶点。

orientdb> DELETE VERTEX Customer WHERE isSpam = TRUE

如果上述命令执行成功,您将获得以下输出内容。

Delete record(s) '3' in 0.005000 sec(s)

OrientDB - Create Edge

在 OrientDB 中, Edge 概念的作用是借助一些属性在顶点之间建立关系。边和顶点是图数据库的主要组成部分。它对边运用多态。边的基类是 E。在实现边时,如果源顶点或目标顶点缺失或不存在,则将回滚该事务。

以下语句是创建边命令的基本语法。

CREATE EDGE <class> [CLUSTER <cluster>] FROM <rid>|(<query>)|[<rid>]* TO <rid>|(<query>)|[<rid>]*
     [SET <field> = <expression>[,]*]|CONTENT {<JSON>}
     [RETRY <retry> [WAIT <pauseBetweenRetriesInMs]] [BATCH <batch-size>]

以下是上文中选项的详细信息。

<class> − 定义边的类名。

<cluster> − 定义用于存储边的集群。

JSON − 提供要设置为记录的 JSON 内容。

RETRY − 定义在发生冲突时尝试的重试次数。

WAIT − 定义重试之间以毫秒为单位的延迟时间。

BATCH − 定义它是否将命令分解为较小的块以及批处理的大小。

Example

执行以下查询,在两个顶点 #9:0 和 #14:0 之间创建一个边 E。

orientdb> CREATE EDGE FROM #11:4 TO #13:2

如果成功执行了以上查询,您会获得以下输出。

Created edge '[e[#10:0][#9:0->#14:0]]' in 0.012000 sec(s)

执行以下查询,创建一个新的边类型和一个新类型的边。

orientdb> CREATE CLASS E1 EXTENDS E
orientdb> CREATE EDGE E1 FROM #10:3 TO #11:4

如果成功执行了以上查询,您会获得以下输出。

Created edge '[e[#10:1][#10:3->#11:4]]' in 0.011000 sec(s)

OrientDB - Update Edge

Update edge 命令用于更新当前数据库中的边记录。这相当于实际的 update 命令,除了在事件中检查和维护与顶点的一致性外,还可以更新 outin 属性。

以下语句是更新边命令的基本语法。

UPDATE EDGE <edge>
   [SET|INCREMENT|ADD|REMOVE|PUT <field-name> = <field-value> [,]*]|[CONTENT|MERGE <JSON>]
   [RETURN <returning> [<returning-expression>]]
   [WHERE <conditions>]
   [LOCK default|record]
   [LIMIT <max-records>] [TIMEOUT <timeout>]

以下是上文中选项的详细信息。

<edge> − 定义要更新的边。你可以在 Class 中选择按类型更新边,在以 Cluster 为前缀的 Cluster 中按群集更新边,或在 Record ID 中按记录 ID 更新边。

SET − 将字段更新为给定值。

INCREMENT − 将给定字段加上该值。

ADD − 定义一个项目以添加到字段集合中。

REMOVE − 定义一个项目以从字段集合中删除。

PUT − 定义入口以放入映射字段中。

RETURN − 定义在运行更新后要返回的表达式。

WHERE − 定义筛选条件。

LOCK − 定义在加载和更新之间记录锁定的方式。

LIMIT − 定义最大记录数。

Example

让我们考虑一个通过从区域 ID = 001 和人员姓名 = Krishna 的地址表获取数据来更新人员类型中的“address”边的示例。

orientdb> UPDATE EDGE address SET out = (SELECT FROM Address WHERE areaID = 001)
WHERE name = 'krishna'

如果成功执行了以上查询,您会获得以下输出。

Updated edge '[address[#10:3][#11:3->#14:2]]' in 0.012000 sec(s)

OrientDB - Delete Edge

Delete edge 命令用于删除数据库。这相当于删除命令,此外还检查并通过从“in”和“out”顶点属性中移除对边的所有交叉引用来维护与顶点的相关性。

以下语句是删除边命令的基本语法。

DELETE EDGE
   ( <rid>
      |
      [<rid> (, <rid>)*]
      |
      ( [ FROM (<rid> | <select_statement> ) ] [ TO ( <rid> | <select_statement> ) ] )
      |
      [<class>]
   (
      [WHERE <conditions>]
      [LIMIT <MaxRecords>]
      [BATCH <batch-size>]
   ))

以下是上文中选项的详细信息。

FROM − 定义要删除的边的起始点顶点。

To − 定义要删除的边的结束点顶点。

WHERE − 定义筛选条件。

LIMIT − 定义要删除的最大边数。

BATCH − 定义操作的块大小。

Example

尝试以下示例以了解如何删除边。

执行以下查询删除两个顶点(#11:2 和 #11:10)之间的边。但是有可能两个顶点之间存在一个或多个边。我们使用 date 属性来实现适当的功能。此查询将删除在“ 2015-01-15 ”及之后创建的边。

orientdb {db = demo}> DELETE EDGE FROM #11:2 TO #11:10 WHERE date >= "2012-01-15"

如果成功执行了以上查询,您会获得以下输出。

Delete record(s) '2' in 0.00200 sec(s)

执行以下查询以删除从顶点“#11:5”开始到顶点“#11:10”且与“class = Customer”相关的边。

orientdb {db = demo}> DELETE EDGE FROM #11:5 TO #11:10 WHERE @class = 'Customer'

如果成功执行了以上查询,您会获得以下输出。

Delete record(s) '2' in 0.00200 sec(s)

OrientDB - Functions

本章解释了 OrientDB 中不同类型函数的完整参考。下表定义了按其功能分类的函数列表。

Graph Functions

使用以下查询尝试一些图函数。

执行以下查询以获取所有车辆顶点的所有传出顶点。

orientdb {db = demo}>SELECT out() from Vehicle

如果成功执行了以上查询,您会获得以下输出。

---+----------+---------
 # | @class   | out
---+----------+---------
 0 | Vehicle  | #11:2
 1 | Vehicle  | #13:1
 2 | Vehicle  | #13:4
---+----------+---------

执行以下查询以获取顶点 #11:3 的传入和传出顶点。

orientdb {db = demo}>SELECT both() FROM #11:3

如果成功执行了以上查询,您会获得以下输出。

---+----------+--------+-------
 # | @class   | out    | in
---+----------+--------+-------
 0 | Vehicle  | #13:2  | #10:2
 ---+----------+-------+-------

Math Functions

使用以下查询尝试一些数学函数。

执行以下查询以获取所有员工的薪水总和。

orientdb {db = demo}>SELECT SUM(salary) FROM Employee

如果成功执行了以上查询,您会获得以下输出。

---+----------+---------
 # | @CLASS   | sum
---+----------+---------
 0 | null     | 150000
---+----------+---------

执行以下查询以获取所有员工的平均薪水。

orientdb {db = demo}>SELECT avg(salary) FROM Employee

如果成功执行了以上查询,您会获得以下输出。

---+----------+---------
 # | @CLASS   | avg
---+----------+---------
 0 | null     | 25
---+----------+---------

Collections Functions

使用以下查询尝试一些集合函数。

执行以下查询以获取教授 9 年级课程的一组教师。

orientdb {db = demo}>SELECT ID, set(teacher.id) AS teacherID from classess where class_id = 9

如果成功执行了以上查询,您会获得以下输出。

---+----------+--------+--------------------------
 # | @CLASS   | id     | TeacherID
---+----------+--------+--------------------------
 0 | null     | 9     |   1201, 1202, 1205, 1208
---+----------+-------+---------------------------

Misc Functions

使用以下查询尝试一些其他函数。

执行以下查询以学习如何执行 if 表达式。

orientdb {db = demo}> SELECT if(eval("name = 'satish'"), "My name is satish",
"My name is not satish") FROM Employee

如果成功执行了以上查询,您会获得以下输出。

----+--------+-----------------------
#   |@CLASS  | IF
----+--------+-----------------------
0   |null    |My name is satish
1   |null    |My name is not satish
2   |null    |My name is not satish
3   |null    |My name is not satish
4   |null    |My name is not satish
----+--------+------------------------

执行以下查询以获取系统日期。

orientdb {db = demo}> SELECT SYSDATE() FROM Employee

如果成功执行了以上查询,您会获得以下输出。

----+--------+-----------------------
#   |@CLASS  | SYSDATE
----+--------+-----------------------
0   |null    |2016-02-10 12:05:06
1   |null    |2016-02-10 12:05:06
2   |null    |2016-02-10 12:05:06
3   |null    |2016-02-10 12:05:06
4   |null    |2016-02-10 12:05:06
----+--------+------------------------

通过彻底使用此函数,你可以轻松地处理 OrientDB 数据。

OrientDB - Sequences

Sequences 是在自动递增机制中使用的概念,它在 OrientDB v2.2 中引入。在数据库术语中,序列是一种管理计数器字段的结构。简单来说,序列通常在需要始终递增的数字时使用。它支持两种类型−

ORDERED −每次指针调用返回新值的 .next 方法。

CACHED −序列将在每个节点上缓存“N”个项目。若要调用每个项目,我们使用 .next() ,在缓存包含多个项目时首选它。

Create Sequence

序列通常用于自动增加人员的 ID 值。与 OrientDB 的其他 SQL 概念一样,它还执行与 RDBMS 中的序列类似的操作。

以下语句是创建序列的基本语法。

CREATE SEQUENCE <sequence> TYPE <CACHED|ORDERED> [START <start>]
[INCREMENT <increment>] [CACHE <cache>]

以下是上文中选项的详细信息。

<Sequence> −序列的本地名称。

TYPE −定义序列类型为有序或缓存。

START −定义初始值。

INCREMENT −为每个 .next 方法调用定义增量。

CACHE −定义预缓存的值的数量(如果使用了缓存序列类型)。

让我们创建一个以数字 1201 开头的名为“seqid”的序列。尝试以下查询使用序列实现此示例。

CREATE SEQUENCE seqid START 1201

如果成功执行了以上查询,您会获得以下输出。

Sequence created successfully

尝试以下查询使用序列“seqid”插入帐户表的 ID 值。

INSERT INTO Account SET id = sequence('seqid').next()

如果成功执行了以上查询,您会获得以下输出。

Insert 1 record(s) in 0.001000 sec(s)

Alter Sequence

Alter sequence 是一条用于更改序列属性的命令。它将修改除序列类型以外的所有序列选项。

以下语句是更改序列的基本语法。

ALTER SEQUENCE <sequence> [START <start-point>]
[INCREMENT <increment>] [CACHE <cache>]

以下是上文中选项的详细信息。

<Sequence> −定义要更改的序列。

START −定义初始值。

INCREMENT −为每个 .next 方法调用定义增量。

CACHE −定义在使用缓存序列类型时要预缓存的值的数量。

尝试以下查询更改名为 seqid 的序列的启动值从“1201 到 1000”。

ALTER SEQUENCE seqid START 1000

如果成功执行了以上查询,您会获得以下输出。

Altered sequence successfully

Drop Sequence

Drop sequence 是一条用于删除序列的命令。

以下语句是删除序列的基本语法。

DROP SEQUENCE <sequence>

其中 <Sequence> 为要删除的序列。

尝试以下查询删除名为“seqid”的序列。

DROP SEQUENCE seqid

如果成功执行了以上查询,您会获得以下输出。

Sequence dropped successfully

OrientDB - Indexes

Index 是指向数据库中数据位置的指针。 Indexing 是一个概念,用于快速找到数据而无需搜索数据库中的每条记录。OrientDB 支持四种索引算法和其中的若干类型。

四种索引类型是:

SB-Tree Index

它提供了一种从其他索引类型中获得的良好功能组合。最好将其用于常规实用工具。它耐用,可进行事务处理并支持范围查询。它是默认索引类型。支持此算法的不同类型插件包括:

  1. UNIQUE - 这些索引不允许重复键。对于复合索引,这指的是复合键的唯一性。

  2. NOTUNIQUE - 这些索引允许重复键。

  3. FULLTEXT - 这些索引基于文本中的任何单个单词。您可以通过 CONTAINSTEXT 运算符在查询中使用它们。

  4. DICTIONARY - 这些索引类似于使用 UNIQUE 的索引,但对于重复键,它们会用新记录替换现有记录。

Hash Index

它的性能更快,并且磁盘占用量非常小。它耐用、可进行事务处理,但不支持范围查询。它的工作原理类似于 HASHMAP,这使得它在点查找方面更快速并且比其他索引类型消耗更少的资源。支持此算法的不同类型插件包括:

  1. UNIQUE_HASH_INDEX - 这些索引不允许重复键。对于复合索引,这指的是复合键的唯一性。

  2. NOTUNIQUE_HASH_INDEX - 这些索引允许重复键。

  3. FULLTEXT_HASH_INDEX - 这些索引基于文本中的任何单个单词。您可以通过 CONTAINSTEXT 运算符在查询中使用它们。

  4. DICTIONARY_HASH_INDEX - 这些索引类似于使用 UNIQUE_HASH_INDEX 的索引,但在重复键的情况下,它们会用新记录替换现有记录。

Lucene Full Text Index

它提供了良好的全文索引,但不能用于对其他类型进行索引。它耐用、可进行事务处理并支持范围查询。

Lucene Spatial Index

它提供了良好的空间索引,但不能用于对其他类型进行索引。它耐用、可进行事务处理并支持范围查询。

Creating Indexes

Create index 是在特定架构上创建索引的命令。

以下语句是创建索引的基本语法。

CREATE INDEX <name> [ON <class-name> (prop-names)] <type> [<key-type>]
[METADATA {<metadata>}]

以下是上文中选项的详细信息。

<name> - 定义索引的逻辑名称。您还可以使用 <class.property> 表示法创建绑定到架构属性的自动索引。<class> 使用架构的类,<property> 使用在类中创建的属性。

<class-name> - 提供用于为其创建自动索引索引的类的名称。此类必须存在于数据库中。

<prop-names> - 提供自动索引要索引的属性列表。这些属性必须已存在于架构中。

<type> - 提供要创建的算法和索引类型。

<key-type> - 在自动索引中提供可选键值。

<metadata> - 提供 JSON 表示。

Example

尝试以下查询以创建自动索引,该索引绑定到用户 sales_user 的属性“ID”。

orientdb> CREATE INDEX indexforID ON sales_user (id) UNIQUE

如果成功执行了以上查询,您会获得以下输出。

Creating index...
Index created successfully with 4 entries in 0.021000 sec(s)

Querying Indexes

可以使用 select 查询获取索引中的记录。

尝试以下查询以检索名为“indexforId”的索引的键。

SELECT FROM INDEX:indexforId

如果成功执行了以上查询,您会获得以下输出。

----+------+----+-----
#   |@CLASS|key |rid
----+------+----+-----
0   |null  |1   |#11:7
1   |null  |2   |#11:6
2   |null  |3   |#11:5
3   |null  |4   |#11:8
----+------+----+-----

Drop Indexes

如果要删除特定索引,可以使用此命令。此操作不会删除链接记录。

以下陈述是对一个索引进行删除的基本语法。

DROP INDEX <name>

<name> 提供要删除的索引的名称。

尝试以下查询以删除用户 sales_user 的名为“ID”的索引。

DROP INDEX sales_users.Id

如果成功执行了以上查询,您会获得以下输出。

Index dropped successfully

OrientDB - Transactions

与 RDBMS 类似,OrientDB 支持事务 ACID 属性。 transaction 包含在数据库管理系统内执行的工作单元。在数据库环境中维护事务有两个主要原因。

  1. 允许从故障中并发恢复,并在系统故障的情况下保持数据库一致性。

  2. 在并发访问数据库的程序之间提供隔离。

默认情况下,数据库事务必须遵循 ACID 属性,如原子性、一致性、隔离性和持久性属性。但 OrientDB 是一个 ACID 兼容数据库,这意味着它不会矛盾或否定 ACID 的概念,而是在处理 NoSQL 数据库时改变了它的认知。了解 ACID 属性如何与 NoSQL 数据库一起工作。

Atomic −当您执行更改数据库操作时,更改应完全成功或失败。

Consistent −数据库应保持一致。

Isolated −如果其他事务执行同时执行,那么用户将无法看到并行执行中的记录。

Durable −如果系统崩溃(硬件或软件),数据库本身应该能够进行备份。

可以使用提交和回滚命令实现数据库事务。

Commit

提交表示通过将所有更改保存到数据库来关闭事务。回滚表示将数据库状态恢复到打开事务时的点。

以下是 COMMIT 数据库命令的基本语法。

COMMIT

Note −您必须在连接到特定的数据库并且开始事务之后才能使用此命令。

Example

在这个示例中,我们将使用这个教程早期某个章节中创建的、称为“demo”的相同的数据库。我们将看到执行事务的操作并将记录使用事务存储起来。

您需要首先使用以下 BEGIN 命令开始事务。

orientdb {db = demo}> BEGIN

使用以下命令向包含 id = 12 和 name = satish.P 值的 employee 表中插入一条记录。

orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')

您可以使用以下命令执行事务。

orientdb> commit

如果此事务成功执行,您将得到以下输出。

Transaction 2 has been committed in 4ms

Rollback

回滚意味着将数据库状态恢复到打开事务时的点。

以下语句是 ROLLBACK 数据库命令的基本语法。

ROLLBACK

Note −您必须在连接到特定的数据库并且开始事务之后才能使用此命令。

Example

在这个示例中,我们将使用这个教程早期某个章节中创建的、称为“demo”的相同的数据库。我们将看到执行回滚事务的操作并将记录使用事务存储起来。

您必须首先使用以下 BEGIN 命令开始事务。

orientdb {db = demo}> BEGIN

使用以下命令向包含 id = 12 和 name = satish.P 值的 employee 表中插入一条记录。

orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')

您可以使用以下命令检索表 employee 的记录。

orientdb> SELECT FROM employee WHERE name LIKE '%.P'

如果成功执行此命令,您将得到以下输出。

---+-------+--------------------
 # | ID   | name
---+-------+--------------------
 0 | 12   | satish.P
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).

您可以使用以下命令回滚此事务。

orientdb> ROLLBACK

再次查看 select 查询来从 Employee 表中检索相同的记录。

orientdb> SELECT FROM employee WHERE name LIKE '%.P'

如果 Rollback 成功执行,您将在输出中得到 0 条记录已找到。

0 item(s) found. Query executed in 0.037 sec(s).

OrientDB - Hooks

OrientDB Hooks 不过是在数据库术语中触发器,它们启用在用户应用程序中的每个 CRUD 操作之前和之后的内部事件。您可以使用钩子来编写自定义验证规则,以强制执行安全性,或安排外部事件,比如对于关系 DBMS 进行复制。

OrientDB 支持两种钩子 −

Dynamic Hook − 触发器,可以在类级别和/或文档级别构建。

Java (Native) Hook − 触发器,可以使用 Java 类构建。

Dynamic Hooks

动态钩子比 Java 钩子更灵活,因为它们可以在运行时更改并且可以在需要时针对每个文档运行,但是比 Java 钩子慢。

要在您的文档上执行钩子,首先允许您的类扩展 OTriggered 基类。之后,为相关事件定义一个自定义属性。以下是可用的事件。

  1. onBeforeCreate − 在 before 创建新文档时调用。

  2. onAfterCreate − 在 after 创建新文档时调用。

  3. onBeforeRead − 在 before 读取文档时调用。

  4. onAfterRead − 在 after 读取文档时调用。

  5. onBeforeUpdate − 在 before 更新文档时调用。

  6. onAfterUpdate − 在 after 更新文档时调用。

  7. onBeforeDelete − 在 before 删除文档时调用。

  8. onAfterDelete − 在 after 删除文档时调用。

动态钩子可以调用 −

  1. 函数,用 SQL、JavaScript 或 OrientDB 和 JVM 支持的任何语言编写。

  2. Java static methods.

Class Level Hooks

类级别钩子为与类相关的所有文件定义。以下示例设置一个在类级别下对发票文件起作用的钩子。

CREATE CLASS Invoice EXTENDS OTriggered
ALTER CLASS Invoice CUSTOM onAfterCreate = invoiceCreated

让我们以 Javascript 编制函数 invoiceCreated ,用于在服务器控制台中打印创建的发票编号。

CREATE FUNCTION invoiceCreated "print('\\nInvoice created: ' + doc.field ('number'));"
LANGUAGE Javascript

现在通过创建新 Invoice 文件来尝试此钩子。

INSERT INTO Invoice CONTENT {number: 100, notes: 'This is a test}

如果成功执行此命令,您将得到以下输出。

Invoice created: 100

Document Level Hook

您只能针对一个或多个文件定义特别操作。为此,允许类扩展 OTriggered 类。

例如,让我们针对现有 Profile 类的所有文件(带有 account = 'Premium' 属性)以 Javascript 函数形式执行一个触发器。此触发器将被调用以防止删除文件。

ALTER CLASS Profile SUPERCLASS OTriggered UPDATE Profile
SET onBeforeDelete = 'preventDeletion' WHERE account = 'Premium'

让我们创建 preventDeletion() Javascript 函数。

CREATE FUNCTION preventDeletion "throw new java.lang.RuntimeException('Cannot
delete Premium profile ' + doc)" LANGUAGE Javascript

然后通过尝试删除 “Premium” 帐户来测试钩子。

DELETE FROM #12:1
java.lang.RuntimeException: Cannot delete Premium profile
profile#12:1{onBeforeDelete:preventDeletion,account:Premium,name:Jill} v-1
(<Unknown source>#2) in <Unknown source> at line number 2

JAVA Hooks

OrientDB 钩子(触发器)的一个常见用例是管理任何或所有类的创建和更新日期。例如,可以设置一个 CreatedDate 字段,在创建记录时使用该字段,设置一个 UpdatedDate 字段,在更新记录时使用该字段,并且可以采用在数据库层一次实现逻辑,无需在应用程序层再次考虑的方法来执行这些操作。

在创建之前,您将必须通过访问以下链接 download OrientDB core 下载 orientdb-core.jar 文件。然后将 JAR 文件复制到要存储 Java 源文件的文件夹中。

Create Hook File

创建一个名为 HookTest.java 的 Java 文件,该文件将使用 Java 语言测试钩子机制。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
import com.orientechnologies.orient.core.hook.ORecordHook;
import com.orientechnologies.orient.core.hook.ORecordHookAbstract;
import com.orientechnologies.orient.core.db.ODatabaseLifecycleListener;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;

public class HookTest extends ODocumentHookAbstract implements ORecordHook {
   public HookTest() {

   }

   @Override
   public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
      return DISTRIBUTED_EXECUTION_MODE.BOTH;
   }
   public RESULT onRecordBeforeCreate( ODocument iDocument ) {
      System.out.println("Ran create hook");
      return ORecordHook.RESULT.RECORD_NOT_CHANGED;
   }
   public RESULT onRecordBeforeUpdate( ODocument iDocument ) {
      System.out.println("Ran update hook");
      return ORecordHook.RESULT.RECORD_NOT_CHANGED;
   }
}

上述示例代码在每次创建或更新该类的记录时都会打印适当的注释。

让我们再添加一个钩子文件 setCreatedUpdatedDates.java 如下:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
import com.orientechnologies.orient.core.hook.ORecordHook;
import com.orientechnologies.orient.core.hook.ORecordHookAbstract;
import com.orientechnologies.orient.core.db.ODatabaseLifecycleListener;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;

public class setCreatedUpdatedDates extends ODocumentHookAbstract implements ORecordHook {
   public setCreatedUpdatedDates() {

   }

   @Override
   public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
      return DISTRIBUTED_EXECUTION_MODE.BOTH;
   }
   public RESULT onRecordBeforeCreate( ODocument iDocument ) {
      if ((iDocument.getClassName().charAt(0) == 't') || (iDocument.getClassName().charAt(0)=='r')) {
         iDocument.field("CreatedDate", System.currentTimeMillis() / 1000l);
         iDocument.field("UpdatedDate", System.currentTimeMillis() / 1000l);
         return ORecordHook.RESULT.RECORD_CHANGED;
      } else {
         return ORecordHook.RESULT.RECORD_NOT_CHANGED;
      }
   }

   public RESULT onRecordBeforeUpdate( ODocument iDocument ) {
      if ((iDocument.getClassName().charAt(0) == 't') || (iDocument.getClassName().charAt(0)=='r')) {
         iDocument.field("UpdatedDate", System.currentTimeMillis() / 1000l);
         return ORecordHook.RESULT.RECORD_CHANGED;
      } else {
         return ORecordHook.RESULT.RECORD_NOT_CHANGED;
      }
   }
}

以上代码所做的是查找任何以字母“ r ”或“ t ”开头的类,并在该记录创建时设置 CreatedDate 和 UpdatedDate,并在每次更新该记录时仅设置 UpdatedDate。

Compile Java Hooks

使用以下命令编译 Java 代码。 Note :将下载的 JAR 文件和这些 Java 文件保留在同一个文件夹中。

$ jar cf hooks-1.0-SNAPSHOT.jar *.java

Move Compiled Code to Where OrientDB Server Can Find It

您需要将完成的 JAR 文件复制到 OrientDB 服务器将对其进行查找的目录中。这意味着 OrientDB 服务器根目录下的“ ./lib ”文件夹将如下所示:

$ cp hooks-1.0-SNAPSHOT.jar "$ORIENTDB_HOME/lib"

Enable Test Hook in the OrientDB Server Configuration File

编辑 $ORIENTDB_HOME/config/orientdb-server-config.xml ,并添加以下部分到该文件的末尾:

   <hooks>
      <hook class = "HookTest" position = "REGULAR"/>
   </hooks>
   ...
</orient-server>

Restart OrientDB Server

一旦重新启动 OrientDB 服务器,您在 orientdb-server-config.xml 中定义的钩子现在就处于活动状态。启动 OrientDB 控制台,将其连接到您的数据库,并运行以下命令:

INSERT INTO V SET ID = 1;

如果成功执行此命令,您将得到以下输出。

Ran create hook

现在,运行以下命令:

UPDATE V SET ID = 2 WHERE ID = 1;

如果成功执行此命令,您将得到以下输出。

Ran update hook

Enable Real Hook in the OrientDB Server Configuration File

编辑 $ORIENTDB_HOME/config/orientdb-server-config.xml ,并将钩子部分更改如下:

   <hooks>
      <hook class="setCreatedUpdatedDates" position="REGULAR"/>
   </hooks>
   ...
</orient-server>

Restart OrientDB Server

从字母“ r ”或“ t ”开始创建新类 -

CREATE CLASS tTest EXTENDS V;

现在插入一条记录 -

INSERT INTO tTest SET ID = 1
SELECT FROM tTest

如果成功执行此命令,您将得到以下输出。

----+-----+------+----+-----------+-----------
#   |@RID |@CLASS|ID  |CreatedDate|UpdatedDate
----+-----+------+----+-----------+-----------
0   |#19:0|tTest |1   |1427597275 |1427597275
----+-----+------+----+-----------+-----------

即使您没有指定为 CreatedDateUpdatedDate 设置的值,OrientDB 也已经为您自动设置了这些字段。

接下来,您需要使用以下命令更新记录 -

UPDATE tTest SET ID = 2 WHERE ID = 1;
SELECT FROM tTest;

如果成功执行此命令,您将得到以下输出。

----+-----+------+----+-----------+-----------
#   |@RID |@CLASS|ID  |CreatedDate|UpdatedDate
----+-----+------+----+-----------+-----------
0   |#19:0|tTest |2   |1427597275 |1427597306
----+-----+------+----+-----------+-----------

您会发现,OrientDB 已经更改了 UpdatedDate ,但未更改 CreatedDate

OrientDB Java Hooks 可能是极有价值的工具,可以帮助您自动完成本来需要在应用程序代码中完成的工作。由于许多 DBA 并不总是 Java 专家,因此希望本教程中包含的信息能为您提供良好的开端,并让您对这项技术充满信心,使您能够在需要时成功创建数据库触发器。

OrientDB - Caching

Caching 是一个概念,它将创建一个数据库表结构的副本,为用户应用程序提供一个舒适的环境。OrientDB 具有多个不同级别的缓存机制。

以下插图给出了有关缓存是什么的想法。

caching mechanisms

在上述插图中, DB1DB2DB3 是应用程序中使用的三个不同的数据库实例。

Level-1 缓存是一个 Local cache ,它存储特定会话已知的所有实体。如果此会话中有三个事务,它将保留所有三个事务使用的所有实体。当您关闭会话或执行“clear”方法时,会清除此缓存。它减轻了应用程序与数据库之间的 I/O 操作负担,进而提高了性能。

Level-2 缓存是一个 Real cache ,它通过使用第三方提供程序来工作。您可以完全控制缓存的内容,即您将能够指定应删除哪些条目,应将哪些条目存储更长时间,依此类推。它是多个线程之间的完全共享缓存。

Storage model 就是存储设备,即磁盘、内存或远程服务器。

How Cache Works in OrientDB?

OrientDB 缓存可在不同环境中提供不同的方法。缓存主要用于更快的数据库事务,减少事务的处理时间并提高性能。以下流程图显示了缓存如何在本地模式和客户端-服务器模式下工作。

Local Mode (Embedded Database)

以下流程图告诉您记录如何在本地模式(即当您的数据库服务器位于本地主机时)在存储和使用的应用程序之间进行。

embedded database

当客户端应用程序请求记录时,OrientDB 检查以下内容:

  1. 如果事务已经开始,则它在事务中搜索已更改的记录并在找到时返回。

  2. 如果启用了本地缓存且其中包含请求的记录,则返回该记录。

  3. 如果此时记录不在缓存中,则向存储 (磁盘、内存) 请求记录。

Client Server Mode (Remote Database)

下述流程图说明了记录位于存储与客户端-服务器模式中使用的应用程序之间的过程,即位于远程位置的数据库服务器。

remote database

当客户端应用程序请求记录时,OrientDB 检查以下信息:

  1. 如果事务已经开始,则它在事务中搜索已更改的记录并在找到时返回。

  2. 如果启用了本地缓存且其中包含请求的记录,则返回该记录。

  3. 此时,如果记录不在缓存中,则通过 TCP/IP 调用向服务器请求记录。

  4. 如果在服务器中启用了本地缓存并且包含请求的记录,则返回该记录。

  5. 此时,记录仍未缓存到服务器中,则向存储 (磁盘、内存) 请求记录。

OrientDB - Logging

OrientDB 使用了与 Java 虚拟机捆绑的 Java 日志记录框架。OrientDB 的默认日志格式由 OLogFormatter 类进行管理。

以下语句是对数记录命令的基本语法。

<date> <level> <message> [<requester>]

以下是上文中选项的详细信息。

<date> − 它以以下格式来表示日期日志:yyyy-MM-dd HH:mm:ss:SSS。

<level> − 它是一个 5 个字符形式输出的日志记录级别。

<message> − 它是日志文本,它可以具有任何大小。

[<class>] − 它是一个被记录的 Java 类(可选)。

受支持的级别是 JRE 类 java.util.logging.Level 中包含的级别。它们为:

  1. SEVERE (highest value)

  2. WARNING

  3. INFO

  4. CONFIG

  5. FINE

  6. FINER

  7. FINEST (lowest value)

默认情况下,安装了两个日志记录器:

  1. Console 是作为启动应用程序/服务器的外壳/命令提示符的输出。可以通过设置变量 log.console.level 来更改。

  2. File 是作为输出至日志文件。可以通过设置 log.file.level 来更改。

Configure Logging

可以使用 Java 之后的日志策略和策略配置一个文件。

syntax − Java 日志记录配置。

Example

orientdb-server-log.properties 文件复制以下内容并将其置于 $ORIENTDB_HOME/config 文件中。

# Specify the handlers to create in the root logger
# (all loggers are children of the root logger)
# The following creates two handlers
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
# Set the default logging level for the root logger
.level = ALL

# Set the default logging level for new ConsoleHandler instances
java.util.logging.ConsoleHandler.level = INFO
# Set the default formatter for new ConsoleHandler instances
java.util.logging.ConsoleHandler.formatter =
   com.orientechnologies.common.log.OLogFormatter

# Set the default logging level for new FileHandler instances
java.util.logging.FileHandler.level = INFO
# Naming style for the output file
java.util.logging.FileHandler.pattern =../log/orient-server.log
# Set the default formatter for new FileHandler instances
java.util.logging.FileHandler.formatter = com.orientechnologies.common.log.OLogFormatter
# Limiting size of output file in bytes:
java.util.logging.FileHandler.limit = 10000000
# Number of output files to cycle through, by appending an
# integer to the base file name:
java.util.logging.FileHandler.count = 10

要告知 JVM 属性文件的位置,您需要设置“ java.util.logging.config.file ”系统属性。例如,使用以下命令 −

$ java -Djava.util.logging.config.file=mylog.properties ...

Set the logging level

要更改日志记录级别而不修改日志记录配置,只要将“ log.console.level ”和“ log.file.level ”系统变量设置为请求的级别即可。

Logging at Startup

以下是通过不同方式在启动级别设置日志记录的步骤。

In the Server Configuration

打开文件 orientdb-server-config.xml ,在 <properties> 部分的文件末尾添加或更新以下行 −

<entry value = "fine" name = "log.console.level" />
<entry value = "fine" name = "log.file.level" />

In Server.sh (or .bat) Script

使用 java 的 -D 参数将系统属性“ log.console.level ”和“ log.file.level ”设置为所需的级别。

$ java -Dlog.console.level = FINE ...

Logging at Run-time

以下是通过不同方式在启动级别设置日志记录的步骤。

By Using Java Code

可以使用 System.setProperty() API 在启动时设置系统变量。以下代码段是使用 Java 代码设置日志记录级别的语法。

public void main(String[] args){
   System.setProperty("log.console.level", "FINE");
   ...
}

On Remote Server

针对 URL 执行 HTTP POST:/server/log.<type>/<level>,其中 −

  1. <type> 可以是“console”或“file”

  2. <level> 是支持的级别之一

Example

以下示例使用 cURL 对 OrientDB 服务器执行 HTTP POST 命令。使用了服务器的“root”用户和密码,请替换为自己的密码。

启用控制台上的精细跟踪级别 −

curl -u root:root -X POST http://localhost:2480/server/log.console/FINEST

启用文件上的精细跟踪级别 −

curl -u root:root -X POST http://localhost:2480/server/log.file/FINEST

OrientDB - Performance Tuning

在本章中,你可以获得一些关于如何优化使用 OrientDB 的应用程序的一般性技巧。有三种方法可以提高不同类型数据库的性能。

  1. Document Database Performance Tuning − 它使用一种有助于避免为每个新文档创建文档的技术。

  2. Object Database Performance Tuning − 它使用通用技术来提高性能。

  3. Distributed Configuration Tuning − 它使用不同的方法来提高分布式配置中的性能。

你可以通过更改内存、JVM 和远程连接设置来实现通用性能调整。

Memory Settings

在内存设置中有不同的策略可以提高性能。

Server and Embedded Settings

这些设置对服务器组件和在嵌入模式下直接使用 plocal 运行 Java 应用程序的 JVM 均有效。

调优最重要的在于确保内存设置正确。决定性因素在于正确平衡内存映射中使用的堆和虚拟内存,特别是在大数据集方面(GB、TB 及以上),在这种情况下,内存内缓存结构的重要性低于原始 IO。

例如,如果可以将最高 8GB 分配给 Java 进程,那么通常分配小堆和较大的磁盘高速缓存(堆外内存)会更好。

尝试以下命令增加堆内存。

java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...

设置 storage.diskCache.bufferSize (旧“本地”存储为 file.mmap.maxMemory )以 MB 为单位,说明磁盘高速缓存组件使用多少内存。默认值为 4GB。

NOTE − 如果最大堆和磁盘高速缓存的总和过高,可能会导致操作系统因巨大减速而交换。

JVM Settings

JVM 设置编码在 server.sh(和 server.bat)批处理文件中。您可以更改它们来根据您的使用情况和硬件/软件设置来调整 JVM。在 server.bat 文件中添加以下行。

-server -XX:+PerfDisableSharedMem

此设置将禁用 JVM 的调试信息写入。如果您需要分析 JVM,只需移除此设置。

Remote Connections

使用远程连接访问数据库时有许多方法可以提高性能。

Fetching Strategy

使用远程数据库时,您必须注意所使用的获取策略。默认情况下,OrientDB 客户端仅加载结果集中包含的记录。例如,如果查询返回 100 个元素,但您如果从客户端遍历这些元素,则 OrientDB 客户端会延迟为每个丢失的记录向服务器进行一次网络调用来加载元素。

Network Connection Pool

默认情况下,每个客户端仅使用一个网络连接与服务器通信。同一客户端的多个线程共享相同的网络连接池。

当有多个线程时,可能会出现瓶颈,因为要等待释放网络连接而花费大量时间。这就是配置网络连接池很重要的原因。

配置非常简单,仅有 2 个参数 −

  1. minPool − 它是连接池的初始大小。默认值配置为全局参数“client.channel.minPool”。

  2. maxPool − 它是连接池可以达到的最大大小。默认值配置为全局参数“client.channel.maxPool”。

如果所有池连接都处于繁忙状态,则客户端线程将等待第一个释放的连接。

通过使用数据库属性配置的示例命令。

database = new ODatabaseDocumentTx("remote:localhost/demo");
database.setProperty("minPool", 2);
database.setProperty("maxPool", 5);

database.open("admin", "admin");

Distributed Configuration Tuning

通过分布式配置提高性能有很多方法。

Use Transactions

即使更新图形,您也应始终在事务中工作。OrientDB 允许您在事务之外工作。常见情况是只读查询,或者在发生故障时可以恢复的庞大且非并发操作。当您在分布式配置上运行时,使用事务有助于降低延迟。这是因为分布式操作仅在提交时发生。由于延迟,分配一个大操作比传输多个小操作更有效。

Replication vs Sharding

OrientDB 分布式配置设置为完全复制。拥有多个具有相同数据库副本的节点对于扩展读取非常重要。事实上,每台服务器都是独立执行读取和查询的。如果您有 10 个服务器节点,则读取吞吐量就是 10 倍。

对于写入操作,正好相反:如果复制是同步的,则具有完全复制的多个节点会使操作变慢。在这种情况下,将数据库分片到多个节点可以扩展写入,因为只有部分节点参与写入。此外,你的数据库可以大于一个服务器节点的 HD。

Scale up on Writes

如果你有慢速网络,并且有同步(默认)复制,则可能会付出延迟的代价。事实上,当 OrientDB 同步运行时,它至少等待 writeQuorum 。这意味着,如果 writeQuorum 为 3,并且有 5 个节点,则协调器服务器节点(分布式操作在那里启动)必须至少等待来自 3 个节点的响应,才能向客户端提供响应。

为了保持一致性,应将 writeQuorum 设置为多数。如果你有 5 个节点,则多数为 3。将 writeQuorum 设置为 3 而不是 4 或 5 可以降低延迟成本,同时仍保持一致性。

Asynchronous Replication

为了加快速度,你可以设置异步复制以消除延迟瓶颈。在这种情况下,协调器服务器节点在本地执行操作,并向客户端提供响应。整个复制将在后台进行。如果未达到法定人数,将透明地回滚更改。

Scale up on Reads

如果你已将 writeQuorum 设置为大多数节点,则可以将 readQuorum 保留为 1(默认值)。这会加快所有读取。

OrientDB - Upgrading

升级时,必须考虑版本号和格式。有三种类型的格式 - MAJOR(主要)、MINOR(次要)、PATCH(修补)。

  1. MAJOR 版本涉及不兼容的 API 更改。

  2. MINOR 版本以向后兼容的方式提供功能。

  3. PTCH 版本涉及向后兼容的错误修复。

要在次要版本和主要版本之间同步,可能需要导出并导入数据库。有时,可能需要将数据库从 LOCAL 迁移到 PLOCAL,并且需要将图迁移到 RidBag。

Migrate from LOCAL Storage Engine to PLOCAL

从版本 1.5.x 开始,OrientDB 带有一个全新的存储引擎:PLOCAL(分页 LOCAL)。它与 LOCAL 一样持久,但以不同的方式存储信息。以下各点显示了 PLOCAL 和 LOCAL 之间的比较 −

  1. 在 PLOCAL Records 中存储在集群文件内,而 LOCAL 会在集群和数据段之间拆分。

  2. 由于采用追加写入模式,因此 PLOCAL 比 LOCAL 更耐用。

  3. PLOCAL 在写入时具有较小的争用锁,这意味着更具并发性。

  4. PLOCAL 不使用内存映射技术 (MMap),因此行为“可预测”。

若要将本地存储迁移到新 PLOCAL,需要使用 PLOCAL 作为存储引擎导出并重新导入数据库。以下为步骤。

Step 1 − 打开一个新 shell(Linux/Mac)或命令提示符(Windows)。

Step 2 − 使用控制台导出数据库。按照给定命令将数据库 demo 导出到 demo.json.gzip 文件中。

$ bin/console.sh (or bin/console.bat under Windows)
orientdb> CONNECT DATABASE local:/temp/demo admin admin
orientdb> EXPORT DATABASE /temp/demo.json.gzip
orientdb> DISCONNECT

Step 3 − 在本地文件系统中,使用“plocal”引擎创建新数据库 −

orientdb> CREATE DATABASE plocal:/temp/newdb admin admin plocal graph

Step 4 − 将旧数据库导入到新数据库中。

orientdb> IMPORT DATABASE /temp/demo.json.gzip -preserveClusterIDs=true
orientdb> QUIT

如果您在相同 JVM 中访问数据库,请务必将 URL 从“local:”更改为“plocal:”

Migrate Graph to RidBag

从 OrientDB 1.7 开始,RidBag 是一种默认集合,用于管理图中的邻接关系。虽然由 MVRB-Tree 管理的较旧数据库完全兼容,但您可以将数据库更新为较新的格式。

您可以通过控制台或使用 ORidBagMigration 类来升级图形。

  1. 连接到数据库 CONNECT plocal:databases/&lt;graphdb-name&gt;

  2. Run upgrade graph command

OrientDB - Security

与 RDBMS 一样,OrientDB 也提供基于众所周知概念、用户和角色的安全机制。每个数据库都有自己的用户,每个用户有一个或多个角色。角色是工作模式和权限集的组合。

Users

默认情况下,OrientDB 为服务器中的所有数据库维护三个不同的用户 −

  1. Admin − 此用户可以不受限制地访问数据库上的所有功能。

  2. Reader − 此用户是只读用户。读者可以查询数据库中的任何记录,但不能修改或删除它们。它无权访问内部信息,例如用户和角色本身。

  3. Writer − 此用户与用户 reader 相同,但它还可以创建、更新和删除记录。

Working with Users

连接到数据库后,可以通过对 OUser 类的 SELECT 查询来查询数据库上的当前用户。

orientdb> SELECT RID, name, status FROM OUser

如果成功执行了以上查询,您会获得以下输出。

---+--------+--------+--------
#  | @CLASS | name   | status
---+--------+--------+--------
0  | null   | admin  | ACTIVE
1  | null   | reader | ACTIVE
2  | null   | writer | ACTIVE
---+--------+--------+--------
3 item(s) found. Query executed in 0.005 sec(s).

Creating a New User

要创建新用户,请使用 INSERT 命令。请记住,在此过程中,你必须将状态设置为 ACTIVE,并授予它一个有效角色。

orientdb> INSERT INTO OUser SET
               name = 'jay',
               password = 'JaY',
               status = 'ACTIVE',
               roles = (SELECT FROM ORole WHERE name = 'reader')

Updating Users

你可以使用 UPDATE 语句更改用户名称。

orientdb> UPDATE OUser SET name = 'jay' WHERE name = 'reader'

同样,你还可以更改用户的密码。

orientdb> UPDATE OUser SET password = 'hello' WHERE name = 'reader'

OrientDB 以哈希格式保存密码。触发器 OUserTrigger 在保存记录之前,会透明地加密密码。

Disabling Users

要禁用用户,请使用 UPDATE 将其状态从 ACTIVE 更改为 SUSPENDED。例如,如果你希望禁用除 admin 之外的所有用户,请使用以下命令 −

orientdb> UPDATE OUser SET status = 'SUSPENDED' WHERE name <> 'admin'

Roles

角色决定用户可以对资源执行哪些操作。该决定主要取决于工作模式和规则。规则本身根据工作模式会采用不同的工作方式。

Working with Roles

连接到数据库后,可以使用对 ORole 类的 SELECT 查询来查询数据库上的当前角色。

orientdb> SELECT RID, mode, name, rules FROM ORole

如果成功执行了以上查询,您会获得以下输出。

--+------+----+--------+-------------------------------------------------------
# |@CLASS|mode| name   | rules
--+------+----+--------+-------------------------------------------------------
0 | null | 1  | admin  | {database.bypassRestricted = 15}
1 | null | 0  | reader | {database.cluster.internal = 2, database.cluster.orole = 0...
2 | null | 0  | writer | {database.cluster.internal = 2, database.cluster.orole = 0...
--+------+----+--------+-------------------------------------------------------
3 item(s) found.  Query executed in 0.002 sec(s).

Creating New Roles

要创建新角色,请使用 INSERT 语句。

orientdb> INSERT INTO ORole SET name = 'developer', mode = 0

Working with Modes

规则用于确定属于特定角色的用户在数据库上可以做什么,工作模式用于确定 OrientDB 如何解释这些规则。工作模式有两种类型,由 1 和 0 指定。

  1. Allow All But (Rules) − 默认情况下,这是超级用户模式。使用规则指定此模式的例外情况。如果 OrientDB 未为所请求资源找到规则,则允许用户执行操作。主要对高级用户和管理员使用此模式。默认角色 admin 默认使用此模式,且没有例外规则。在数据库中写为 1。

  2. Deny All But (Rules) − 默认情况下,此模式不允许任何操作。使用规则指定此模式的例外情况。如果 OrientDB 为所请求资源找到规则,则允许用户执行操作。对所有经典用户使用此模式作为默认模式。默认角色 reader 和 writer 使用此模式。在数据库中写为 0。

OrientDB - Studio

OrientDB 提供了一个 Web UI 来通过 GUI 执行数据库操作。本章介绍 OrientDB 中提供的不同选项。

Studio Homepage

Studio 是一个用于管理 OrientDB 的 Web 界面,作为 OrientDB 发行版的一部分提供。

首先,你需要使用以下命令启动 OrientDB 服务器。

$ server.sh

在计算机上运行 OrientDB 时,可以通过 URL 访问 Web 界面 −

http://localhost:2480

如果成功执行了该命令,屏幕上会出现以下输出。

administration orientdb

Connect to an Existing Database

要登录,请从数据库列表中选择一个数据库,并使用任意数据库用户。默认情况下(用户名/密码), reader/reader 可以读取数据库中的记录, writer/writer 可以读取、创建、更新和删除记录,而 admin/admin 拥有所有权限。

Drop an Existing Database

从数据库列表中选择一个数据库,然后单击废纸篓图标。Studio 会打开一个确认弹出窗口,你必须在其中输入服务器用户名和服务器密码。

然后单击“删除数据库”按钮。你可以在 $ORIENTDB_HOME/config/orientdb-server-config.xml 文件中找到服务器凭证。

<users>
   <user name = "root" password = "pwd" resources = "*" />
</users>

Create a New Database

要创建一个新数据库,请单击主页上的“新建数据库”按钮。

new database

需要以下信息才能创建新数据库 −

  1. Database name

  2. Database type (Document/Graph)

  3. Storage type (plocal/memory)

  4. Server user

  5. Server password

你可以在 $ORIENTDB_HOME/config/orientdbserver-config.xml 文件中找到服务器凭证。

<users>
   <user name = "root" password = "pwd" resources = "*" />
</users>

创建后,Studio 会自动登录到新数据库。

Execute a Query

Studio 支持对你正在使用的语言(包括 SQL 和 Gremlin)来自动识别。在编写时,按 Ctrl + Space 使用自动完成功能。

查询编辑器中提供以下快捷方式 −

  1. Ctrl + Return − 执行查询或只需单击 Run 按钮。

  2. Ctrl/Cmd + Z − 撤消更改。

  3. Ctrl/Cmd + Shift + Z - 重做更改。

  4. Ctrl/Cmd + F - 在编辑器中搜索。

  5. Ctrl/Cmd + / - 切换注释。

以下截图显示了如何执行查询。

execute query

通过单击结果集中任何 @rid 值,如果记录是文档,您将进入文档编辑模式;否则,您将进入顶点编辑模式。

您可以通过单击结果集中或编辑器中的星形图标对查询进行书签。要浏览有书签的查询,请单击 Bookmarks 按钮。Studio 将在左侧打开书签列表,您可以在其中编辑/删除或重新运行查询。

bookmark query

Studio 将执行的查询保存在浏览器的本地存储中。在查询设置中,您可以配置 Studio 在历史记录中保留多少查询。您还可以搜索以前执行的查询、从历史记录中删除所有查询或删除单个查询。

Edit Vertex

要编辑图表的顶点,请转到图部分。然后运行以下查询。

Select From Customer

在成功运行查询后,以下是输出屏幕截图。选择图画布中的特定顶点进行编辑。

graph canvas

选择特定顶点上的编辑符号。您将获得以下屏幕,其中包含编辑顶点的选项。

edit symbol

Schema Manager

OrientDB 可以以无模式模式、模式模式或两者兼有的模式工作。这里,我们将讨论模式模式。单击 Web UI 顶部的架构部分。您将获得以下屏幕截图。

schema mode

Create a New Class

要创建新类,只需单击 New Class 按钮。将显示以下屏幕截图。您必须提供屏幕截图中所示的以下信息才能创建新类。

create new class

View All Indexes

当您希望概述数据库中创建的所有索引时,只需单击架构 UI 中的所有索引按钮即可。这将快速访问有关索引的一些信息(名称、类型、属性等),您可以从此处删除或重建它们。

view all indexes

Edit Class

单击架构部分中的任何类,您将获得以下屏幕截图。

edit class

在编辑类时,您可以添加属性或添加新索引。

Add a Property

单击新属性按钮以添加属性。您将获得以下屏幕截图。

您必须提供屏幕截图中所示的以下详细信息才能添加属性。

add property

Add an Index

单击新索引按钮。您将获得以下屏幕截图。您必须提供屏幕截图中所示的以下详细信息才能添加索引。

add index

Graph Editor

单击图部分。您不仅可以在图样式中可视化数据,还可以与图进行交互并对其进行修改。

若要填充图表区域,请在查询编辑器中键入查询或使用浏览界面左的发送到图表功能。

graph editor

Add Vertices

若要在图表数据库和图表画布区域中添加新顶点,您必须按下 Add Vertex 按钮。此操作分两步完成。

在第一步,您必须选择新顶点所属的类别,然后单击下一步。

add vertex

在第二步,您必须插入新顶点的字段值。您还可以添加自定义字段,因为 OrientDB 支持无模式模式。若要使新顶点持久化,请单击“保存更改”,然后顶点将被保存到数据库中并添加到画布区域。

new vertex

Delete Vertices

通过单击要删除的顶点打开循环菜单。将鼠标悬停在菜单项更多(…​)上打开子菜单,然后单击回收站图标。

Remove Vertices from Canvas

打开循环菜单, 将鼠标悬停在菜单项更多(…​)上打开子菜单, 然后单击橡皮擦图标。

Inspect Vertices

如果要快速查看顶点属性,请点击眼睛图标。

inspect vertex

Security

Studio 2.0 包含新的安全管理,您可以在其中以图形方式管理用户和角色。

Users

您可以执行以下操作来管理数据库用户 -

  1. Search Users

  2. Add Users

  3. Delete Users

  4. 编辑用户:可以内联编辑角色,对于名称、状态和密码,单击 Edit 按钮

database users

Add Users

若要添加新用户,请单击 Add User 按钮,填写新用户的信息(姓名、密码、状态、角色),然后保存以将新用户添加到数据库中。

add users

Roles

您可以执行以下操作来管理数据库角色 -

  1. Search Role

  2. Add Role

  3. Delete Role

  4. Edit Role

database roles

Add Role

若要添加新用户,请单击 Add Role 按钮,填写新角色的信息(名称、父角色、模式),然后保存以将新角色添加到数据库中。

add roles

Add Rule to a Role

若要为所选角色添加新的安全规则,请单击 Add Rule 按钮。这将会询问您要保护的资源字符串。然后,您可以在新创建的资源上配置 CRUD 权限。

add role

OrientDB - Java Interface

与 RDBMS 类似,OrientDB 支持 JDBC。为此,我们首先需要为 JDBC 编程配置环境。以下是创建应用程序和数据库之间连接的过程。

首先,我们需要下载 JDBC 驱动程序。访问以下链接 https://code.google.com/archive/p/orient/downloads 下载 OrientDB-JDBC。

以下是实现 OrientDB-jdbc 连接的基本五个步骤。

  1. Load JDBC driver

  2. Create Connection

  3. Create statement

  4. Execute statement

  5. Close connection

Example

尝试以下示例来理解 OrientDB-JDBC 连接。让我们考虑一张包含以下字段及其类型的员工表。

Sr.No.

Field Name

Type

1

Id

Integer

2

Name

String

3

Salary

Integer

4

Join date

Date

您可以通过执行以下命令创建架构(表)。

CREATE DATABASE PLOCAL:/opt/orientdb/databases/testdb
CREATE CLASS Employee
CREATE PROPERTY Customer.id integer
CREATE PROPERTY Customer.name String
CREATE PROPERTY Customer.salary integer
CREATE PROPERTY Customer.join_date date

执行所有命令后,将生成包含以下字段的 Employee 表,即带 ID 的雇员姓名、年龄和入职日期字段。

将以下代码保存在 OrientJdbcDemo.java 文件中。

import com.orientechnologies.common.log.OLogManager;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;

import java.io.File;
import java.sql.DriverManager;
import java.util.Properties;

import static com.orientechnologies.orient.jdbc.OrientDbCreationHelper.createSchemaDB;
import static com.orientechnologies.orient.jdbc.OrientDbCreationHelper.loadDB;
import static java.lang.Class.forName;

public abstract class OrientJdbcDemo {

   protected OrientJdbcConnection conn;

   public static void main(String ar[]){

      //load Driver
      forName(OrientJdbcDriver.class.getName());
      String dbUrl = "memory:testdb";
      ODatabaseDocumentTx db = new ODatabaseDocumentTx(dbUrl);
      String username = "admin";
      String password = "admin";
      createSchemaDB(db);
      loadDB(db, 20);
      dbtx.create();

      //Create Connection
      Properties info = new Properties();
      info.put("user", username);
      info.put("password", password);
      conn = (OrientJdbcConnection) DriverManager.getConnection("jdbc:orient:" + dbUrl, info);

      //create and execute statement
      Statement stmt = conn.createStatement();
      int updated = stmt.executeUpdate("INSERT into emplyoee
         (intKey, text, salary, date) values ('001','satish','25000','"
         + date.toString() + "')");
      int updated = stmt.executeUpdate("INSERT into emplyoee
         (intKey, text, salary, date) values ('002','krishna','25000','"
         + date.toString() + "')");
      System.out.println("Records successfully inserted");

      //Close Connection
      if (conn != null && !conn.isClosed())
         conn.close();
   }
}

以下命令用于编译上述程序。

$ javac –classpath:.:orientdb-jdbc-1.0-SNAPSHOT.jar OrientJdbcDemo.java
$ java –classpath:.:orientdb-jdbc-1.0-SNAPSHOT.jar OrientJdbcDemo

如果上述命令执行成功,您将获得以下输出内容。

Records Successfully Inserted

OrientDB - Python Interface

面向 Python 的 OrientDB 驱动程序使用二进制协议。PyOrient 是帮助将 OrientDB 连接到 Python 的 git hub 项目名称。它适用于 OrientDB 1.7 及更高版本。

以下命令用于安装 PyOrient。

pip install pyorient

可以将名为 demo.py 的脚本文件用于执行以下任务:

  1. 创建客户端实例,即创建连接。

  2. Create DB named DB_Demo.

  3. Open DB named DB_Demo.

  4. Create class my_class.

  5. 创建属性 ID 和名称。

  6. 插入记录到我的类。

//create connection
client = pyorient.OrientDB("localhost", 2424)
session_id = client.connect( "admin", "admin" )
//create a databse
client.db_create( db_name, pyorient.DB_TYPE_GRAPH, pyorient.STORAGE_TYPE_MEMORY )
//open databse
client.db_open( DB_Demo, "admin", "admin" )
//create class
cluster_id = client.command( "create class my_class extends V" )
//create property
cluster_id = client.command( "create property my_class.id Integer" )
cluster_id = client.command( "create property my_class.name String" )
//insert record
client.command("insert into my_class ( 'id','’name' ) values( 1201, 'satish')")

使用以下命令执行上述脚本。

$ python demo.py