OrientDB 快速指南



OrientDB - 概述

OrientDB 是一個開源 NoSQL 資料庫管理系統。NoSQL 資料庫提供了一種儲存和檢索非關係型資料的機制,這些資料指的是表格資料以外的資料,例如文件資料或圖資料。NoSQL 資料庫越來越多地用於大資料和即時 Web 應用程式。NoSQL 系統有時也被稱為“不僅僅是 SQL”,以強調它們可能支援類似 SQL 的查詢語言。

OrientDB 也屬於 NoSQL 家族。OrientDB 是一個第二代分散式圖資料庫,在一個產品中兼具文件的靈活性和 Apache 2 許可證的開源特性。在 OrientDB 之前,市場上已經存在一些 NoSQL 資料庫,其中之一是 MongoDB。

MongoDB vs OrientDB

MongoDB 和 OrientDB 包含許多共同的功能,但其引擎從根本上有所不同。MongoDB 是純粹的文件資料庫,而 OrientDB 是一個混合的文件和圖引擎資料庫。

特性 MongoDB OrientDB
關係 使用 RDBMS JOIN 來建立實體之間的關係。它具有較高的執行時成本,並且在資料庫規模增加時無法擴充套件。 像關係資料庫一樣嵌入和連線文件。它使用來自圖資料庫世界的直接、超快速的連結。
獲取計劃 代價高昂的 JOIN 操作。 輕鬆返回包含互連文件的完整圖。
事務 不支援 ACID 事務,但支援原子操作。 支援 ACID 事務以及原子操作。
查詢語言 擁有基於 JSON 的自身語言。 查詢語言基於 SQL。
索引 對所有索引使用 B 樹演算法。 支援三種不同的索引演算法,以便使用者可以獲得最佳效能。
儲存引擎 使用記憶體對映技術。 使用儲存引擎名稱 LOCAL 和 PLOCAL。

OrientDB 是第一個多模型開源 NoSQL DBMS,它將圖的強大功能和文件的靈活效能結合到一個可擴充套件的高效能操作資料庫中。

OrientDB - 安裝

OrientDB 安裝檔案有兩種版本:

  • 社群版 - OrientDB 社群版由 Apache 根據 0.2 許可證釋出,作為一個開源專案。

  • 企業版 - OrientDB 企業版作為一個專有軟體釋出,它構建在社群版的基礎之上。它是社群版的擴充套件。

本章解釋 OrientDB 社群版的安裝過程,因為它是一個開源專案。

先決條件

社群版和企業版都可以在任何實現了 Java 虛擬機器 (JVM) 的作業系統上執行。OrientDB 需要 Java 1.7 或更高版本。

請按照以下步驟將 OrientDB 下載並安裝到您的系統中。

步驟 1 - 下載 OrientDB 二進位制安裝檔案

OrientDB 帶有內建安裝檔案,用於在您的系統上安裝資料庫。它為不同的作業系統提供不同的預編譯二進位制包(壓縮包或 tar 包)。您可以從 下載 OrientDB 連結下載 OrientDB 檔案。

下面的截圖顯示了 OrientDB 的下載頁面。您可以透過單擊相應作業系統圖示來下載壓縮包或 tar 包。

Download Page of OrientDB

下載後,您將在您的下載資料夾中獲得二進位制包。

步驟 2 - 解壓並安裝 OrientDB

以下是針對不同作業系統的解壓和安裝 OrientDB 的過程。

在 Linux 中

下載後,您將在下載資料夾中獲得orientdb-community-2.1.9.tar.gz檔案。您可以使用以下命令解壓 tar 包。

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

您可以使用以下命令將所有 OrientDB 庫檔案從orientdbcommunity-2.1.9移動到/opt/orientdb/目錄。這裡我們使用超級使用者命令 (sudo),因此您必須提供超級使用者密碼才能執行以下命令。

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

您可以使用以下命令註冊orientdb命令和 Orient 伺服器。

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

在 Windows 中

  • 下載後,您將在下載資料夾中獲得orientdb-community-2.1.9.zip檔案。使用 zip 解壓工具解壓 zip 檔案。

  • 將解壓後的資料夾移動到C:\目錄。

  • 建立兩個環境變數 ORIENTDB_HOME 和 PATH,並使用以下值。

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

步驟 3 - 將 OrientDB 伺服器配置為服務

按照上述步驟,您可以使用 OrientDB 的桌面版本。您可以透過以下步驟將 OrientDB 資料庫伺服器啟動為服務。具體步驟因作業系統而異。

在 Linux 中

OrientDB 提供了一個名為orientdb.sh的指令碼檔案來執行資料庫作為守護程序。您可以在 OrientDB 安裝目錄的 bin/ 目錄中找到它,即 $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

使用以下命令將 console.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

使用以下命令停止 OrientDB 伺服器守護程序。您必須在此處提供您在 orientdb.sh 檔案中提到的相應使用者的密碼才能停止伺服器。

$ service orientdb stop

在 Windows 中

OrientDB 是一個伺服器應用程式,因此在啟動和關閉 Java 虛擬機器程序之前,它必須執行多個任務。如果您想手動關閉 OrientDB 伺服器,則必須執行shutdown.bat檔案。但是,當系統突然關閉而沒有執行上述指令碼時,伺服器例項無法正確停止。在 Windows 中,由作業系統透過一組指定的訊號控制的程式稱為服務

我們必須使用Apache Common Daemon,它允許 Windows 使用者將 Java 應用程式包裝為 Windows 服務。以下是下載和註冊 Apache Common Daemon 的過程。

  • 單擊以下連結以獲取 適用於 Windows 的 Apache Common Daemons

  • 單擊common-daemon-1.0.15-bin-windows進行下載。

  • 解壓common-daemon-1.0.15-bin-windows目錄。解壓後,您將在目錄中找到prunsrv.exeprunmgr.exe檔案。其中:

    • prunsrv.exe檔案是一個服務應用程式,用於將應用程式作為服務執行。

    • prunmgr.exe檔案是一個用於監控和配置 Windows 服務的應用程式。

  • 轉到 OrientDB 安裝資料夾→建立一個新目錄,並將其命名為 service。

  • 複製prunsrv.exeprunmgr.exe並將它們貼上到 service 目錄中。

  • 為了將 OrientDB 配置為 Windows 服務,您必須執行一個簡短的指令碼,該指令碼使用 prusrv.exe 作為 Windows 服務。

  • 在定義 Windows 服務之前,您必須根據服務名稱重新命名 prunsrv 和 prunmgr。例如,分別為 OrientDBGraph 和 OrientDBGraphw。這裡 OrientDBGraph 是服務名稱。

  • 將以下指令碼複製到名為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 

該指令碼需要兩個引數:

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

  • OrientDB 安裝的位置,例如 C:\orientdb-community-2.1.9

  • 當您執行 OrientDBGraph.exe 檔案(原始 prunsrv)並雙擊它時,服務將被安裝。

  • 使用以下命令將服務安裝到 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

步驟 4 - 驗證 OrientDB 安裝

此步驟使用以下步驟驗證 OrientDB 資料庫伺服器安裝。

  • 執行伺服器。
  • 執行控制檯。
  • 執行 Studio。

這因作業系統而異。

在 Linux 中

請按照以下步驟在 Linux 中驗證 OrientDB 安裝。

執行伺服器 - 您可以使用以下命令啟動伺服器。

$ 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] 

執行控制檯 - 您可以使用以下命令在控制檯中執行 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>

執行 Studio - 啟動伺服器後,您可以在瀏覽器中使用以下 URL(https://:2480/)。您將看到以下截圖。

Running the Studio

在 Windows 中

請按照以下步驟在 Windows 中驗證 OrientDB 安裝。

執行伺服器 - 您可以使用以下命令啟動伺服器。

> 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] 

執行控制檯 - 您可以使用以下命令在控制檯中執行 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\>

執行 Studio - 啟動伺服器後,您可以在瀏覽器中使用以下 URL(https://:2480/)。您將看到以下截圖。

Running the Studio

OrientDB - 基本概念

OrientDB 的主要特性是支援多模型物件,即支援文件、圖、鍵值對和真實物件等不同模型。它包含單獨的 API 來支援這四種模型。

文件模型

術語“文件模型”屬於 NoSQL 資料庫。這意味著資料儲存在文件中,文件的集合稱為集合。從技術上講,文件表示一組鍵值對,也稱為欄位或屬性。

OrientDB 使用類、叢集和連結等概念來儲存、分組和分析文件。

下表說明了關係模型、文件模型和 OrientDB 文件模型之間的比較:

關係模型文件模型OrientDB 文件模型
集合類或叢集
文件文件
鍵值對文件欄位
關係不可用連結

圖模型

圖資料結構是一種資料模型,可以以頂點(節點)透過邊(弧)互連的形式儲存資料。OrientDB 圖資料庫的概念源於屬性圖。頂點和邊是圖模型的主要構成要素。它們包含屬性,這使得它們看起來類似於文件。

下表顯示了圖模型、關係資料模型和 OrientDB 圖模型之間的比較。

關係模型圖模型OrientDB 圖模型
頂點和邊類擴充套件“V”(頂點)和“E”(邊)的類
頂點頂點
頂點和邊屬性頂點和邊屬性
關係

鍵值模型

鍵值模型意味著資料可以以鍵值對的形式儲存,其中值可以是簡單型別和複雜型別。它可以支援文件和圖元素作為值。

下表說明了關係模型、鍵值模型和 OrientDB 鍵值模型之間的比較。

關係模型鍵值模型OrientDB 鍵值模型
類或叢集
鍵值對文件
不可用文件欄位或頂點/邊屬性
關係不可用連結

物件模型

此模型繼承自面向物件程式設計,支援型別之間的繼承(子型別擴充套件超型別)、多型性(引用基類時)和程式語言中使用的物件之間的直接繫結

下表說明了關係模型、物件模型和 OrientDB 物件模型之間的比較。

關係模型物件模型OrientDB 物件模型
類或叢集
物件文件或頂點
物件屬性文件欄位或頂點/邊屬性
關係指標連結

在詳細介紹之前,最好了解與 OrientDB 相關的基本術語。以下是一些重要的術語。

記錄

可以從資料庫載入和儲存的最小單位。記錄可以儲存在四種類型中。

  • 文件
  • 記錄位元組
  • 頂點

記錄 ID

當 OrientDB 生成記錄時,資料庫伺服器會自動為記錄分配一個唯一識別符號,稱為 RecordID (RID)。RID 的格式類似於 #<叢集>:<位置>。<叢集> 表示叢集標識號,<位置> 表示記錄在叢集中的絕對位置。

文件

文件是 OrientDB 中最靈活的記錄型別。文件是弱型別的,由具有定義約束的模式類定義,但您也可以在沒有任何模式的情況下插入文件,即它也支援無模式模式。

文件可以輕鬆地以 JSON 格式匯出和匯入。例如,請檢視以下 JSON 示例文件。它定義了文件詳細資訊。

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

記錄位元組

記錄型別與 RDBMS 中的 BLOB 型別相同。OrientDB 可以載入和儲存文件記錄型別以及二進位制資料。

頂點

OrientDB 資料庫不僅是文件資料庫,也是圖資料庫。諸如頂點和邊之類的新的概念用於以圖的形式儲存資料。在圖資料庫中,最基本的的資料單元是節點,在 OrientDB 中稱為頂點。頂點儲存資料庫資訊。

有一種名為邊的單獨記錄型別,用於連線一個頂點到另一個頂點。邊是雙向的,只能連線兩個頂點。OrientDB 中有兩種型別的邊,一種是常規邊,另一種是輕量級邊。

類是一種資料模型型別,其概念源於面向物件程式設計正規化。基於傳統的文件資料庫模型,資料以集合的形式儲存,而在關係資料庫模型中,資料儲存在表中。OrientDB 遵循文件 API 和 OOP 正規化。作為一個概念,OrientDB 中的類與關係資料庫中的表關係最密切,但是(與表不同)類可以是無模式的、有模式的或混合的。類可以繼承自其他類,建立類樹。每個類都有自己的叢集或叢集(如果未定義,則預設建立)。

叢集

叢集是一個重要的概念,用於儲存記錄、文件或頂點。簡單來說,叢集是儲存一組記錄的地方。預設情況下,OrientDB 將為每個類建立一個叢集。一個類的所有記錄都儲存在與類名稱相同的叢集中。您可以在資料庫中建立多達 32,767 (2^15-1) 個叢集。

CREATE class 是用於建立具有特定名稱的叢集的命令。建立集群后,您可以透過在建立任何資料模型時指定名稱來使用該叢集儲存記錄。

關係

OrientDB 支援兩種關係:引用關係和嵌入關係。引用關係表示它儲存指向關係目標物件的直接連結。嵌入關係表示它在嵌入它的記錄記憶體儲關係。這種關係比引用關係更強。

資料庫

資料庫是訪問實際儲存的介面。它理解諸如查詢、模式、元資料、索引等高階概念。OrientDB 還提供多種資料庫型別。有關這些型別的更多資訊,請參見資料庫型別。

OrientDB - 資料型別

OrientDB 原生支援多種資料型別。以下是關於這些型別的完整表格。

序號型別描述
1 布林值

僅處理 True 或 False 值。

Java 型別:java.lang.Boolean

最小值: 0

最大值: 1

2 整數

32 位有符號整數。

Java 型別:java.lang.Integer

最小值: -2,147,483,648

最大值: +2,147,483,647

3 短整數

16 位有符號小整數。

Java 型別:java.lang.Short

最小值: -32,768

最大值: 32,767

4 長整數

64 位有符號大整數。

Java 型別:java.lang.Long

最小值:-263

最大值:+263-1

5 浮點數

十進位制數。

Java 型別:java.lang.Float

: 2-149

最大值:(2-2-23)*2127

6 雙精度浮點數

高精度十進位制數。

Java 型別:java.lang.Double

最小值:2-1074

最大值:(2-2-52)*21023

7 日期時間

任何日期,精度高達毫秒。

Java 型別:java.util.Date

8 字串

任何字串,作為字元的字母數字序列。

Java 型別:java.lang.String

9 二進位制

可以包含任何位元組陣列值。

Java 型別:byte[]

最小值: 0

最大值: 2,147,483,647

10 嵌入式

記錄包含在所有者內部。包含的記錄沒有 RecordId。

Java 型別:ORecord

11 嵌入式列表

記錄包含在所有者內部。包含的記錄沒有 RecordId,只能透過導航所有者記錄訪問。

Java 型別:List<objects>

最小值: 0

最大值:41,000,000 個專案

12 嵌入式集合

記錄包含在所有者內部。包含的記錄沒有 RecordId,只能透過導航所有者記錄訪問。

Java 型別:Set<objects>

最小值: 0

最大值:41,000,000 個專案

13 嵌入式對映

記錄作為條目的值包含在所有者內部,而鍵只能是字串。包含的記錄沒有 RecordId,只能透過導航所有者記錄訪問。

Java 型別:Map<String, ORecord>

最小值: 0

最大值:41,000,000 個專案

14 連結

指向另一個記錄的連結。這是一種常見的一對一關係

Java 型別:ORID,<? extends ORecord>

最小值: 1

最大值: 32767:2^63-1

15 連結列表

指向其他記錄的連結。這是一種常見的一對多關係,其中只儲存 RecordId。

Java 型別:List<? extends ORecord>

最小值: 0

最大值:41,000,000 個專案

16 連結集合

指向其他記錄的連結。這是一種常見的一對多關係。

Java 型別:Set<? extends ORecord>

最小值: 0

最大值:41,000,000 個專案

17 連結對映

指向其他記錄的連結,作為條目的值,而鍵只能是字串。這是一種常見的一對多關係。只儲存 RecordId。

Java 型別:Map<String, ? extends Record>

最小值: 0

最大值:41,000,000 個專案

18 位元組

單個位元組。用於儲存 8 位有符號小整數。

Java 型別:java.lang.Byte

最小值: -128

最大值: +127

19 瞬態 任何未儲存在資料庫中的值。
20 日期

任何日期,如年、月和日。

Java 型別:java.util.Date

21 自定義

用於儲存提供 Marshal 和 Unmarshal 方法的自定義型別。

Java 型別:OSerializableStream

最小值: 0

最大值:x

22 十進位制

不進行舍入的十進位制數。

Java 型別:java.math.BigDecimal

23 連結包

作為特定 RidBag 的 RecordId 列表。

Java 型別:ORidBag

24 任何

不確定型別,用於指定混合型別的集合和 null。

在接下來的章節中,將討論如何在 OrientDB 中使用這些資料型別。

OrientDB - 控制檯模式

OrientDB 控制檯是一個 Java 應用程式,用於處理 OrientDB 資料庫和伺服器例項。OrientDB 支援多種控制檯模式。

互動模式

這是預設模式。只需透過執行以下指令碼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>

完成後,控制檯即可接受命令。

批處理模式

要在批處理模式下執行命令,請執行以下bin/console.sh(或 MS Windows 系統中的bin/console.bat)指令碼,並使用分號“;”分隔所有命令。

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

或者呼叫控制檯指令碼,傳遞包含要執行的命令列表的文字檔名。命令必須用分號“;”分隔。

示例

Command.txt 包含您想要透過 OrientDB 控制檯執行的命令列表。以下命令從 command.txt 檔案接收批處理命令。

orientdb> console.bat commands.txt 

在批處理模式下,您可以忽略錯誤以讓指令碼繼續執行,方法是將“ignoreErrors”變數設定為 true。

orientdb> set ignoreErrors true

啟用回顯

在管道中執行控制檯命令時,您需要顯示它們。透過在開頭將其設定為屬性來啟用命令的“echo”。以下是啟用OrientDB控制檯中的echo屬性的語法。

orientdb> set echo true

OrientDB - 建立資料庫

OrientDB資料庫的SQL參考提供了建立、更改和刪除資料庫的多個命令。

以下語句是建立資料庫命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

<database-url> − 定義資料庫的URL。URL包含兩部分,一部分是<mode>,另一部分是<path>。

<mode> − 定義模式,即本地模式或遠端模式。

<path> − 定義資料庫的路徑。

<user> − 定義您要連線到的資料庫的使用者。

<password> − 定義連線到資料庫的密碼。

<storage-type> − 定義儲存型別。您可以在PLOCAL和MEMORY之間進行選擇。

示例

您可以使用以下命令建立一個名為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 <attribute-name> <attribute-value> 

其中<attribute-name>定義您要修改的屬性,而<attributevalue>定義您要為此屬性設定的值。

下表定義了支援更改資料庫的屬性列表。

序號屬性名稱描述
1 STATUS 定義不同屬性之間資料庫的狀態。
2 IMPORTING 設定匯入狀態。
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 設定用於選擇叢集的預設策略。這些策略是與類建立一起建立的。支援的策略包括default、roundrobin和balanced。
11 MINIMUMCLUSTERS 設定建立新類時自動建立的最小叢集數。預設值為1。
12 CUSTOM 設定自定義屬性。
13 VALIDATION 停用或啟用整個資料庫的驗證。

示例

從OrientDB-2.2版本開始,添加了新的SQL解析器,在某些情況下它不允許使用常規語法。因此,在某些情況下我們必須停用新的SQL解析器(StrictSQL)。您可以使用以下更改資料庫命令來停用StrictSQL解析器。

orientdb> ALTER DATABASE custom strictSQL = false 

如果命令執行成功,您將獲得以下輸出。

Database updated successfully

OrientDB - 備份資料庫

與RDBMS一樣,OrientDB也支援備份和恢復操作。執行備份操作時,它將使用ZIP演算法將當前資料庫的所有檔案壓縮成壓縮的zip格式。此功能(備份)可以透過啟用自動備份伺服器外掛自動獲得。

資料庫備份或資料庫匯出是相同的,但是,根據過程,我們必須知道何時使用備份以及何時使用匯出。

在進行備份時,它將建立一個數據庫的一致副本,所有後續的寫入操作都將被鎖定並等待備份過程完成。在此操作中,它將建立一個只讀備份檔案。

如果您需要在進行備份時進行併發讀寫操作,則必須選擇匯出資料庫而不是備份資料庫。匯出不會鎖定資料庫,並允許在匯出過程中進行併發寫入。

以下語句是資料庫備份的基本語法。

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

以下是上述語法中選項的詳細資訊。

<dburl> − 資料庫URL,資料庫位於本地或遠端位置。

<user> − 指定執行備份的使用者名稱。

<password> − 提供特定使用者的密碼。

<destination> − 目標檔案位置,指示儲存備份zip檔案的位置。

<type> − 可選備份型別。它有兩個選項之一。

  • Default − 在備份期間鎖定資料庫。

  • LVM − 使用LVM複製寫入快照在後臺。

示例

備份位於本地檔案系統/opt/orientdb/databases/demo中的名為demo的資料庫,將其備份到名為sample-demo.zip的檔案中,並將其放在當前目錄中。

您可以使用以下命令備份demo資料庫。

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

使用控制檯

您可以使用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 - 恢復資料庫

與RDBMS一樣,OrientDB也支援恢復操作。您只能在控制檯模式下成功執行此操作。

以下語句是恢復操作的基本語法。

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

示例

您必須僅在控制檯模式下執行此操作。因此,您必須首先使用以下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 - 連線資料庫

本章解釋如何從OrientDB命令列連線到特定資料庫。它開啟一個數據庫。

以下語句是連線命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

<database-url> − 定義資料庫的URL。URL包含兩部分,一部分是<mode>,另一部分是<path>。

<mode> − 定義模式,即本地模式或遠端模式。

<path> − 定義資料庫的路徑。

<user> − 定義您要連線到的資料庫的使用者。

<password> − 定義連線到資料庫的密碼。

示例

我們已經在前面的章節中建立了一個名為“demo”的資料庫。在此示例中,我們將使用使用者admin連線到該資料庫。

您可以使用以下命令連線到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 - 斷開資料庫連線

本章解釋如何從OrientDB命令列斷開與特定資料庫的連線。它關閉當前開啟的資料庫。

以下語句是斷開連線命令的基本語法。

DISCONNECT

注意 − 只有在連線到特定資料庫後才能使用此命令,它只會關閉當前正在執行的資料庫。

示例

在此示例中,我們將使用我們在上一章中建立的相同名為“demo”的資料庫。我們將從demo資料庫斷開連線。

您可以使用以下命令斷開資料庫連線。

orientdb {db = demo}> DISCONNECT

如果成功斷開連線,您將獲得以下輸出:

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

OrientDB - 資料庫資訊

本章解釋如何從OrientDB命令列獲取特定資料庫的資訊。

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

info

注意 − 只有在連線到特定資料庫後才能使用此命令,它將僅檢索當前正在執行的資料庫的資訊。

示例

在此示例中,我們將使用我們在上一章中建立的相同名為“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 - 列出資料庫

本章解釋如何從OrientDB命令列獲取例項中所有資料庫的列表。

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

LIST DATABASES

注意 − 只有在連線到本地或遠端伺服器後才能使用此命令。

示例

在檢索資料庫列表之前,我們必須透過遠端伺服器連線到本地主機伺服器。需要提醒的是,連線到本地主機例項的使用者名稱和密碼分別是guest和guest,這在orintdb/config/orientdb-server-config.xml檔案中配置。

您可以使用以下命令連線到本地主機資料庫伺服器例項。

orientdb> connect remote:localhost guest 

它將提示輸入密碼。根據配置檔案,guest的密碼也是guest。如果成功連線,您將獲得以下輸出。

Connecting to remote Server instance [remote:localhost] with user 'guest'...OK 
orientdb {server = remote: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 - 凍結資料庫

每當您想要使資料庫狀態保持靜態時,這意味著資料庫不會響應任何讀寫操作。簡單地說,資料庫處於凍結狀態。

在本章中,您可以學習如何從OrientDB命令列凍結資料庫。

以下語句是凍結資料庫命令的基本語法。

FREEZE DATABASE

注意 − 只有在連線到遠端或本地資料庫中的特定資料庫後才能使用此命令。

示例

在此示例中,我們將使用我們在上一章中建立的相同名為“demo”的資料庫。我們將從CLI凍結此資料庫。

您可以使用以下命令凍結資料庫。

Orientdb {db = demo}> FREEZE DATABASE

如果成功執行,您將獲得以下輸出。

Database 'demo' was frozen successfully

OrientDB - 解凍資料庫

本章將講解如何透過 OrientDB 命令列將資料庫從凍結狀態解除。

以下是解除資料庫凍結命令的基本語法。

RELEASE DATABASE

注意 − 只有在連線到處於凍結狀態的特定資料庫後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“demo”的同一資料庫。我們將解除上一章中凍結的資料庫。

可以使用以下命令解除資料庫凍結。

Orientdb {db = demo}> RELEASE DATABASE

如果成功執行,您將獲得以下輸出。

Database 'demo' was release successfully 

OrientDB - 配置資料庫

本章將講解如何透過 OrientDB 命令列顯示特定資料庫的配置。此命令適用於本地和遠端資料庫。

配置資訊包含預設快取是否啟用、快取大小、負載因子值、對映最大記憶體、節點頁面大小、池最小和最大大小等。

以下是資料庫配置命令的基本語法。

CONFIG

注意 − 只有在連線到特定資料庫後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“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 SET <config-variable> <config-value>

注意 − 只有在連線到特定資料庫後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“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 GET <config-variable> 

注意 − 只有在連線到特定資料庫後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“demo”的同一資料庫。我們將嘗試檢索“tx.autoRetry”變數的值。

可以使用以下命令顯示 demo 資料庫的配置。

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

如果成功執行,您將獲得以下輸出。

Local configuration: tx.autoRetry = 5 

OrientDB - 匯出資料庫

與 RDBMS 類似,OrientDB 也提供資料庫匯出和匯入功能。OrientDB 使用 JSON 格式匯出資料。預設情況下,匯出命令使用 GZIP 演算法壓縮檔案。

匯出資料庫時不會鎖定資料庫,這意味著您可以對其執行併發讀寫操作。這也意味著由於併發讀寫操作,您可以建立資料的精確副本。

本章將講解如何透過 OrientDB 命令列匯出資料庫。

以下是匯出資料庫命令的基本語法。

EXPORT DATABASE <output file>

注意 − 只有在連線到特定資料庫後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“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 - 匯入資料庫

無論何時要匯入資料庫,都必須使用匯出命令生成的 JSON 格式的匯出檔案。

本章將講解如何透過 OrientDB 命令列匯入資料庫。

以下是匯入資料庫命令的基本語法。

IMPORT DATABASE <input file> 

注意 − 只有在連線到特定資料庫後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“demo”的同一資料庫。可以使用以下命令將資料庫匯入名為“export-demo.gz”的檔案。

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

如果執行成功,您將獲得以下輸出以及成功通知。

Database import completed in 11612ms

OrientDB - 提交資料庫

與 RDBMS 類似,OrientDB 也提供事務概念,如提交和回滾。提交是指透過將所有更改儲存到資料庫來關閉事務。回滾是指將資料庫狀態恢復到開啟事務時的狀態。

以下是提交資料庫命令的基本語法。

COMMIT 

注意 − 只有在連線到特定資料庫並在開始事務後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“demo”的同一資料庫。我們將看到使用事務提交事務和儲存記錄的操作。

首先,使用以下BEGIN命令啟動事務。

orientdb {db = demo}> BEGIN

然後,使用以下命令將記錄插入到員工表中,其值為 id = 12 和 name = satish.P。

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

可以使用以下命令提交事務。

orientdb> commit

如果此事務成功提交,您將獲得以下輸出。

Transaction 2 has been committed in 4ms

OrientDB - 回滾資料庫

本章將講解如何透過 OrientDB 命令列介面回滾未提交的事務。

以下是回滾資料庫命令的基本語法。

ROLLBACK

注意 − 只有在連線到特定資料庫並在開始事務後才能使用此命令。

示例

在本例中,我們將使用上一章建立的名為“demo”的同一資料庫。我們將看到回滾事務和使用事務儲存記錄的操作。

首先,使用以下BEGIN命令啟動事務。

orientdb {db = demo}> BEGIN

然後,使用以下命令將記錄插入到員工表中,其值為 id = 12 和 name = satish.P。

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 - 最佳化資料庫

根據技術術語,最佳化意味著“在最短的時間內獲得最佳效能”。關於資料庫,最佳化包括最大限度地提高資料檢索的速度和效率。

OrientDB 支援輕量級邊,這意味著資料實體之間的直接關係。簡單來說,它是一種欄位到欄位的關係。OrientDB 提供不同的方法來最佳化資料庫。它支援將常規邊轉換為輕量級邊。

以下是最佳化資料庫命令的基本語法。

OPTMIZE DATABASE [-lwedges] [-noverbose] 

其中lwedges將常規邊轉換為輕量級邊,noverbose停用輸出。

示例

在本例中,我們將使用上一章建立的名為“demo”的同一資料庫。可以使用以下最佳化資料庫命令。

OPTIMIZE DATABASE -lwedges

如果執行成功,您將獲得一些成功通知以及完成訊息。

Database Optimization completed in 35ms

OrientDB - 刪除資料庫

與 RDBMS 類似,OrientDB 提供了刪除資料庫的功能。刪除資料庫是指完全刪除資料庫。

以下是刪除資料庫命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

<database-name> − 要刪除的資料庫名稱。

<server-username> − 具有刪除資料庫許可權的資料庫使用者名稱。

<server-user-password> − 特定使用者的密碼。

示例

有兩種方法可以刪除資料庫,一種是刪除當前開啟的資料庫,另一種是透過提供特定名稱來刪除特定資料庫。

在本例中,我們將使用前面章節中建立的名為“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 - 插入記錄

OrientDB 是一個 NoSQL 資料庫,可以儲存文件和麵向圖的資料。NoSQL 資料庫不包含任何表,那麼如何將資料插入為記錄呢?在這裡您可以看到表資料以類的形式、屬性、頂點和邊的形式,這意味著類就像表,屬性就像表中的欄位。

我們可以使用 OrientDB 中的模式定義所有這些實體。屬性資料可以插入到類中。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 − 定義要返回的表示式,而不是插入的記錄數。最常見的用例是 −

  • @rid − 返回新記錄的記錄 ID。

  • @this − 返回整個新記錄。

FROM − 您要插入記錄或結果集的位置。

示例

讓我們考慮一個具有以下欄位和型別的 Customer 表。

序號欄位名稱型別
1Id整數
2Name字串
3Age整數

您可以透過執行以下命令來建立模式(表)。

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

執行所有命令後,您將獲得名為 Customer 的表,其中包含 id、name 和 age 欄位。您可以透過執行 Customer 表中的 select 查詢來檢查該表。

OrientDB 提供不同的方法來插入記錄。考慮以下包含示例記錄的 Customer 表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja29

以下命令是將第一條記錄插入 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 - 顯示記錄

與 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 − 定義是否要使用快取。

示例

讓我們考慮一下上一章中建立的客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja29

嘗試不同的 select 查詢來從客戶表中檢索資料記錄。

方法 1 − 您可以使用以下查詢從客戶表中選擇所有記錄。

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   
----+-----+--------+----+-------+----

方法 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 
----+-----+--------+----+-------+----

方法 3 − 從客戶表中選擇 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      
----+--------+----+------- 

方法 4 − 選擇客戶表中年齡在 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   
----+-----+--------+----+-------+---- 

方法 5 − 選擇客戶表中任何欄位包含單詞“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   
----+-----+--------+----+-------+---- 

方法 6 − 選擇客戶表中的所有記錄,並按年齡降序排列。

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 Record 命令的基本語法。

LOAD RECORD <record-id> 

其中<record-id> 定義要載入的記錄的記錄 ID。

如果您不知道特定記錄的記錄 ID,則可以對錶執行任何查詢。在結果集中,您將找到相應記錄的記錄 ID(@rid)。

示例

讓我們考慮一下我們在前幾章中使用的相同的客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja29

嘗試以下查詢來檢索具有記錄 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 的工作方式也類似於 Load Record 命令,也用於從模式載入特定記錄。Load record 將藉助記錄 ID 載入記錄。它在結果集中用@rid 符號表示。主要區別在於 Reload record 會忽略快取,這在應用外部併發事務來更改記錄時非常有用。它將提供最新的更新。

以下語句是 RELOAD Record 命令的基本語法。

RELOAD RECORD <record-id>

其中<record-id> 定義要重新載入的記錄的記錄 ID。

如果您不知道特定記錄的記錄 ID,則可以對錶執行任何查詢。在結果集中,您將找到相應記錄的記錄 ID(@rid)。

示例

讓我們考慮一下我們在上一章中使用的相同的客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja29

嘗試以下查詢來檢索具有記錄 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 命令用於將載入的記錄匯出到請求的和支援的格式。如果您執行任何錯誤的語法,它將提供支援的格式列表。OrientDB 是文件資料庫系列,因此 JSON 是預設支援的格式。

以下語句是 Export Record 命令的基本語法。

EXPORT RECORD <format> 

其中<Format> 定義您想要獲取記錄的格式。

注意 − Export 命令將基於記錄 ID 匯出載入的記錄。

示例

讓我們考慮一下我們在上一章中使用的相同的客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja29

嘗試以下查詢來檢索具有記錄 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                                             | 
+---------------------------------------------------------------------------+ 

使用以下查詢將載入的記錄(#11:0)匯出為 JSON 格式。

orientdb {db = demo}> EXPORT RECORD json 

如果以上查詢成功執行,您將獲得以下輸出。

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

OrientDB - 更新記錄

Update Record 命令用於修改特定記錄的值。SET 是更新特定欄位值的命令。

以下語句是 Update 命令的基本語法。

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 − 定義您希望更新執行的時間,超過此時間將超時。

示例

讓我們考慮一下我們在上一章中使用的相同的客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja29

嘗試以下查詢來更新客戶“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 命令的基本語法。

TRUNCATE RECORD <rid>* 

其中<rid>* 表示要截斷的記錄 ID。您可以使用逗號分隔多個 Rid 來截斷多個記錄。它返回被截斷的記錄數。

示例

讓我們考慮一下我們在上一章中使用的相同的客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21
5Raja28

嘗試以下查詢來截斷具有記錄 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 命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

LOCK − 指定如何在載入和更新之間鎖定記錄。我們有兩個選項可以指定DefaultRecord

RETURN − 指定要返回的表示式,而不是記錄數。

LIMIT − 定義要更新的記錄的最大數量。

TIMEOUT − 定義您希望更新執行的時間,超過此時間將超時。

注意 − 不要使用 DELETE 刪除頂點或邊,因為它會影響圖的完整性。

示例

讓我們考慮一下客戶表。

序號NameAge
1Satish25
2Krishna26
3Kiran29
4Javeed21

嘗試以下查詢刪除 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 - 建立類

OrientDB 支援多模型功能,並提供不同的方法來處理和理解資料庫的基本概念。但是,我們可以從文件資料庫 API 的角度輕鬆訪問這些模型。像 RDBMS 一樣,OrientDB 也使用記錄作為儲存元素,但它使用文件型別。文件以鍵值對的形式儲存。我們將欄位和屬性作為屬於概念類的鍵值對儲存。

是一種資料模型型別,其概念源自面向物件程式設計正規化。基於傳統的文件資料庫模型,資料以集合的形式儲存,而在關係資料庫模型中,資料儲存在表中。OrientDB 遵循文件 API 以及 OPPS 正規化。作為一個概念,OrientDB 中的類與關係資料庫中的表關係最密切,但(與表不同)類可以是無模式的、有模式的或混合的。類可以從其他類繼承,建立類樹。每個類都有它自己的叢集或叢集(如果未定義,則預設建立)。

以下語句是 Create Class 命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

<class> − 定義要建立的類的名稱。

<super-class> − 定義要以此類擴充套件的超類。

<total-cluster-number> − 定義此類中使用的叢集總數。預設為 1。

ABSTARCT − 定義類為抽象類。這是可選的。

示例

如上所述,類是一個與表相關的概念。因此,在這裡我們將建立一個名為 Account 的表。但是,在建立類時,我們不能根據 OOPS 正規化定義欄位,即屬性。

以下命令用於建立一個名為 Account 的類。

orientdb> CREATE CLASS Account

如果以上命令成功執行,您將獲得以下輸出。

Class created successfully 

您可以使用以下命令建立一個擴充套件類Vehicle的類Car

orientdb> CREATE CLASS Car EXTENDS Vehicle 

如果以上命令成功執行,您將獲得以下輸出。

Class created successfully

您可以使用以下命令建立一個名為 Person 的抽象類。

orientdb> CREATE CLASS Person ABSTRACT 

如果以上命令成功執行,您將獲得以下輸出。

Class created successfully 

注意 − 沒有屬性的類是無用的,無法構建真實的類。

OrientDB - 修改類

OrientDB 中的類和屬性用於構建具有相應屬性(例如類名、超類、叢集、叢集數、Abstract 等)的模式。如果要修改或更新模式中現有類的任何屬性,則必須使用Alter Class 命令。

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

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

以下是上述語法中選項的詳細資訊。

<class> − 定義類名。

<attribute-name> − 定義要更改的屬性。

<attribute-value> − 定義要為屬性設定的值。

下表定義了支援 Alter Class 命令的屬性列表。

屬性型別描述
NAME 字串更改類名。
SHORTNAME 字串為類定義短名稱(即別名)。使用 NULL 刪除短名稱賦值。
SUPERCLASS 字串為類定義超類。要新增新類,可以使用語法 +<class>,要刪除它,可以使用 -<class>。
OVERSIZE 十進位制數 定義超大因子。
ADDCLUSTER 字串向類新增叢集。如果叢集不存在,它將建立一個物理叢集。向類新增叢集在分散式伺服器中儲存記錄也很有用。
REMOVECLUSTER 字串從類中刪除叢集。它不會刪除叢集,只會將其從類中刪除。
STRICTMODE -啟用或停用嚴格模式。在嚴格模式下,您在完全模式下工作,如果屬性是類模式定義的一部分,則無法向記錄新增新屬性。
CLUSTERSELECTION -定義選擇策略,用於選擇為新記錄使用哪個叢集。
CUSTOM -定義自定義屬性。屬性名稱和值必須遵循語法 <propertyname>=<value>,名稱和值之間沒有空格。
ABSTRACT 布林值將類轉換為抽象類或相反。

示例

讓我們嘗試一些將更新或修改現有類屬性的示例。

以下查詢用於為現有類“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 將刪除定義為類一部分的所有叢集的記錄。在 OrientDB 中,每個類都具有與之關聯的同名叢集。如果還想要從類層次結構中刪除所有記錄,則需要使用 POLYMORPHIC 關鍵字。

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

TRUNCATE CLASS <class> [ POLYMORPHIC ] [ UNSAFE ]

以下是上述語法中選項的詳細資訊。

<class> − 定義要截斷的類。

多型 (POLYMORPHIC) − 定義命令是否也截斷層次結構。

不安全 (UNSAFE) − 定義命令強制截斷頂點或邊類。

示例

以下查詢用於截斷Profile類。

orientdb> TRUNCATE CLASS Profile

如果以上查詢成功執行,您將獲得以下輸出。

Class truncated successfully 

OrientDB - 刪除類

刪除類 (Drop Class) 命令從模式中刪除一個類。注意並維護一致的模式非常重要。例如,避免刪除作為其他類的超類的類。關聯的叢集不會被刪除。

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

DROP CLASS <class> 

刪除具有類名稱的類。

示例

嘗試以下查詢以刪除 Employee 類。

Orientdb> DROP CLASS Employee

如果以上查詢成功執行,您將獲得以下輸出。

Class dropped successfully

OrientDB - 建立叢集

叢集 (Cluster) 是 OrientDB 中的一個重要概念,用於儲存記錄、文件或頂點。簡單來說,叢集是儲存一組記錄的地方。預設情況下,OrientDB 將為每個類建立一個叢集。一個類的所有記錄都儲存在同一個叢集中,該叢集與類的名稱相同。您可以在資料庫中建立最多 32,767 (2^15-1) 個叢集。

CREATE class 命令用於建立具有特定名稱的叢集。建立集群后,您可以透過在建立任何資料模型時指定名稱來使用叢集儲存記錄。如果要向類新增新的叢集,請使用 Alter Class 命令和 ADDCLUSTER 命令。

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

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

其中<cluster> 定義要建立的叢集的名稱,<cluster-id> 定義要用於叢集的數字 ID。

下表提供了叢集選擇策略的列表。

序號策略 & 描述
1

預設 (Default)

使用類屬性 default ClusterId 選擇叢集。

2

輪詢 (Round-robin)

按迴圈順序選擇下一個叢集。完成後重新啟動。

3

平衡 (Balanced)

選擇最小的叢集。允許類在大小上平衡所有底層叢集。向現有類新增新叢集時,它會先填充新叢集。

示例

讓我們以建立名為 sales 的叢集為例。

orientdb> CREATE CLUSTER sales 

如果以上查詢成功執行,您將獲得以下輸出。

Cluster created correctly with id #12 

OrientDB - 修改叢集

修改叢集 (Alter Cluster) 命令用於更新現有叢集上的屬性。在本節中,您可以學習如何新增或修改叢集的屬性。

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

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

以下是上述語法中選項的詳細資訊。

<cluster> − 定義叢集名稱。

<attribute-name> − 定義要更改的屬性。

<attribute-value> − 定義要為此屬性設定的值。

下表提供了您可以與 Alter cluster 命令一起使用的受支援屬性列表。

Name 型別描述
NAME 字串 更改叢集名稱。
STATUS 字串 更改叢集狀態。允許的值為 ONLINE 和 OFFLINE。預設情況下,叢集處於聯機狀態。
壓縮 (COMPRESSION) 字串 定義要使用的壓縮型別。允許的值為 NOTHING、SNAPPY、GZIP 和在 OCompressionFactory 類中註冊的任何其他壓縮型別。
使用寫前日誌 (USE_WAL) 布林值 定義 OrientDB 對叢集進行操作時是否使用日誌。
記錄增長因子 (RECORD_GROW_FACTOR) 整數 定義增長因子以在記錄建立時節省更多空間。當您使用附加資訊更新記錄時,您可能會發現這很有用。
記錄溢位增長因子 (RECORD_OVERFLOW_GROW_FACTOR) 整數 定義更新時的增長因子。當它達到大小限制時,它使用此設定來獲取更多空間 (因子 > 1)。
衝突策略 (CONFLICTSTRATEGY) 字串 定義它用於處理衝突的策略,如果 OrientDB MVCC 發現它對舊記錄執行的更新或刪除操作。

下表提供了衝突策略的列表。

序號策略 & 描述
1

版本 (Version)

版本不同時丟擲異常。這是預設設定。

2

內容 (Content)

如果版本不同,則檢查內容的更改,否則使用最高版本以避免丟擲異常。

3

自動合併 (Automerge)

合併更改。

示例

嘗試以下示例查詢以瞭解 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 <cluster-name>

其中<cluster-name> 是叢集的名稱。

示例

嘗試以下查詢以截斷名為 sales 的叢集。

Orientdb {db = demo}> TRUNCATE CLUSTER Profile

如果以上查詢成功執行,您將獲得以下輸出。

Cluster truncated successfully.

OrientDB - 刪除叢集

刪除叢集 (Drop Cluster) 命令刪除叢集及其所有相關內容。此操作是永久性的,不可回滾。

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

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

其中<cluster-name> 定義要刪除的叢集的名稱,<cluster-id> 定義要刪除的叢集的 ID。

示例

嘗試以下命令刪除 Sales 叢集。

orientdb> DROP CLUSTER Sales 

如果以上查詢成功執行,您將獲得以下輸出。

Cluster dropped successfully

OrientDB - 建立屬性

OrientDB 中的屬性 (Property) 類似於類中的欄位和資料庫表中的列。建立屬性 (Create 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)

示例

嘗試以下示例以在 Employee 類中建立名為 name 的字串型別屬性。

orientdb> CREATE PROPERTY Employee.name STRING

如果以上查詢成功執行,您將獲得以下輸出。

Property created successfully with id = 1 

OrientDB - 修改屬性

修改屬性 (Alter Property) 是用於修改或更新特定類的屬性的命令。修改屬性意味著修改表的欄位。在本節中,您可以學習如何更新屬性。

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

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

以下是上述語法中選項的詳細資訊。

<class> − 定義屬性所屬的類。

<property> − 定義要更新的屬性。

<attribute-name> − 定義要更新的屬性的屬性。

<attribute-value> − 定義要為此屬性設定的值。

下表定義了用於修改屬性的屬性列表。

屬性型別描述
關聯類 (LINKEDCLASS)字串定義關聯的類名。使用 NULL 刪除現有值。
關聯型別 (LINKEDTYPE)字串定義連結型別。使用 NULL 刪除現有值。
最小值 (MIN)整數定義最小值作為約束。使用 NULL 刪除現有約束。
必填 (MANDATORY)布林值定義屬性是否需要值。
最大值 (MAX)整數定義最大值作為約束。使用 NULL 刪除現有約束。
NAME字串定義屬性名稱。
非空 (NOTNULL)布林值定義屬性是否可以具有 NULL 值。
正則表示式 (REGEX)字串定義正則表示式作為約束。使用 NULL 刪除現有約束。
型別 (TYPE)字串定義屬性型別。
排序規則 (COLLATE) 字串 將排序規則設定為已定義的比較策略之一。預設情況下,它設定為區分大小寫 (cs)。您也可以將其設定為不區分大小寫 (ci)。
只讀 (READONLY) 布林值 定義屬性值是否不可變。也就是說,是否可以在第一次賦值後更改它。與 DEFAULT 一起使用可在建立時具有不可變的值。
CUSTOM 字串 定義自定義屬性。自定義屬性的語法為 <custom-name> = <custom-value>,例如 stereotype = icon。
預設值 (DEFAULT)   定義預設值或函式。

注意 − 如果您正在更改 NAME 或 TYPE,則此命令將需要一些時間來更新,具體取決於資料量。

示例

嘗試以下一些查詢來了解 Alter property。

執行以下查詢以將 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 <class>.<property> [FORCE] 

以下是上述語法中選項的詳細資訊。

<class> − 定義屬性存在的類。

<property> − 定義要刪除的屬性。

[Force] − 如果在屬性上定義了一個或多個索引。

示例

嘗試以下命令從“Customer”類中刪除“age”屬性。

orientdb> DROP PROPERTY Customer.age 

如果以上命令成功執行,您將獲得以下輸出。

Property dropped successfully 

OrientDB - 建立頂點

OrientDB 資料庫不僅是文件資料庫,也是圖資料庫。頂點和邊等新概念用於以圖的形式儲存資料。它對頂點應用多型性。頂點的基類是 V。

在本節中,您可以學習如何建立頂點以儲存圖資料。

以下語句是 Create Vertex 命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

<class> − 定義頂點所屬的類。

<cluster> − 定義儲存頂點的叢集。

<field> − 定義要設定的欄位。

<expression> − 定義要為欄位設定的表示式。

示例

嘗試以下示例以瞭解如何建立頂點。

執行以下查詢以在基類 V 上建立沒有“name”的頂點。

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 - 移動頂點

OrientDB 中的移動頂點 (Move Vertex) 命令用於將一個或多個頂點從當前位置移動到不同的類或叢集。如果您將移動命令應用於特定頂點,則它將更新連線到此頂點的所有邊。如果您指定一個叢集來移動頂點,則它會將頂點移動到目標叢集的伺服器所有者。

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

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

以下是上述語法中選項的詳細資訊。

<source> − 定義要移動的頂點。它接受特定頂點的記錄 ID 或頂點的記錄 ID 陣列。

<destination> − 定義要將頂點移動到的位置。它支援類或叢集作為目標。

SET − 將值設定為欄位。

MERGE − 透過 JSON 將值設定為欄位。

BATCH − 定義批處理大小。

注意 − 此命令更新所有連線的邊,但不更新連結。使用圖 API 時,建議使用連線到頂點的邊。

示例

嘗試以下示例以學習如何移動頂點。

執行以下查詢以將具有記錄 ID #11:2 的單個頂點從其當前位置移動到 Employee 類。

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)

執行以下查詢將一組頂點從“Customer”類移動到“Employee”類。

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 - 刪除頂點

刪除頂點命令用於從資料庫中刪除頂點。刪除時,它會檢查並維護與邊的 consistency,並刪除所有與已刪除頂點的交叉引用(與邊一起)。

以下語句是刪除頂點命令的基本語法。

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

以下是上述語法中選項的詳細資訊。

<vertex> − 定義要刪除的頂點,可以使用其類、記錄 ID 或子查詢。

WHERE − 篩選條件,用於確定命令刪除哪些記錄。

LIMIT − 定義要刪除的最大記錄數。

BATCH − 定義命令一次刪除多少條記錄,允許您將大型事務分解成較小的塊以節省記憶體使用。

示例

嘗試以下命令來學習如何刪除單個頂點或多個頂點。

執行以下命令刪除頂點“#14:1”。

orientdb> DELETE VERTEX #14:1

如果以上命令成功執行,您將獲得以下輸出。

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

執行以下命令刪除“Customer”類中所有標記為“isSpam”屬性的頂點。

orientdb> DELETE VERTEX Customer WHERE isSpam = TRUE 

如果以上命令成功執行,您將獲得以下輸出。

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

OrientDB - 建立邊

在 OrientDB 中,的概念就像藉助某些屬性在頂點之間建立的關係一樣。邊和頂點是圖資料庫的主要組成部分。它對邊應用多型性。邊的基類是 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 − 定義是否將命令分解成較小的塊以及批次的 size。

示例

執行以下查詢在兩個頂點 #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 - 更新邊

更新邊命令用於更新當前資料庫中的邊記錄。這相當於實際的更新命令,此外還檢查並維護與頂點的圖一致性,如果您更新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 − 定義最大記錄數。

示例

讓我們考慮一個更新 person 類中名為“address”的邊的示例,該邊從 area Id = 001 和 person name = 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 命令,此外還透過從“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 − 定義操作的塊 size。

示例

嘗試以下示例來學習如何刪除邊。

執行以下查詢刪除兩個頂點(#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 - 函式

本章解釋了 OrientDB 中不同型別函式的完整參考。下表定義了按功能分類的函式列表。

圖函式

嘗試一些圖函式以及以下查詢。

執行以下查詢以獲取所有車輛頂點的所有出度頂點。

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   
 ---+----------+-------+-------

數學函式

嘗試使用以下查詢使用一些數學函式。

執行以下查詢以獲取所有員工的薪資總和。

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 
---+----------+--------- 

集合函式

使用以下查詢嘗試一些集合函式。

執行以下查詢以獲取教授九年級課程的教師集合。

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 
---+----------+-------+---------------------------

雜項函式

使用以下查詢嘗試一些雜項函式。

執行以下查詢以瞭解如何執行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 - 序列

序列是自動遞增機制中使用的概念,它在OrientDB v2.2中引入。在資料庫術語中,序列是管理計數器欄位的結構。簡單地說,序列主要用於需要始終遞增的數字。它支援兩種型別:

ORDERED − 每當指標呼叫返回新值的.next方法時。

CACHED − 序列將在每個節點上快取“N”個專案。要呼叫每個專案,我們使用.next(),當快取包含多個專案時,這是首選。

建立序列

序列通常用於自動遞增人員的ID值。與OrientDB的其他SQL概念一樣,它也執行與RDBMS中的序列類似的操作。

以下語句是建立序列的基本語法。

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

以下是上述語法中選項的詳細資訊。

<Sequence> − 序列的本地名稱。

TYPE − 定義序列型別ORDERED或CACHED。

START − 定義初始值。

INCREMENT − 定義每次.next方法呼叫時的增量。

CACHE − 定義要預快取的值的數量,如果您使用的是快取序列型別。

讓我們建立一個名為“seqid”的序列,它從數字1201開始。嘗試以下查詢以使用序列實現此示例。

CREATE SEQUENCE seqid START 1201

如果以上查詢成功執行,您將獲得以下輸出。

Sequence created successfully

嘗試以下查詢以使用序列“seqid”插入Account表的id值。

INSERT INTO Account SET id = sequence('seqid').next() 

如果以上查詢成功執行,您將獲得以下輸出。

Insert 1 record(s) in 0.001000 sec(s) 

更改序列

更改序列是用於更改序列屬性的命令。它將修改所有序列選項,除了序列型別。

以下語句是更改序列的基本語法。

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 <sequence>

其中<Sequence>定義您要刪除的序列。

嘗試以下查詢以刪除名為“seqid”的序列。

DROP SEQUENCE seqid

如果以上查詢成功執行,您將獲得以下輸出。

Sequence dropped successfully

OrientDB - 索引

索引是指向資料庫中資料位置的指標。索引是用於快速定位資料而不必搜尋資料庫中每個記錄的概念。OrientDB支援四種索引演算法和每種演算法中的幾種型別。

四種索引型別是:

SB-Tree索引

它提供了其他索引型別提供的功能的良好組合。最好將其用於通用實用程式。它是永續性的、事務性的,並支援範圍查詢。它是預設索引型別。支援此演算法的不同型別外掛有:

  • UNIQUE − 這些索引不允許重複鍵。對於複合索引,這指的是複合鍵的唯一性。

  • NOTUNIQUE − 這些索引允許重複鍵。

  • FULLTEXT − 這些索引基於任何單個文字單詞。您可以透過CONTAINSTEXT運算子在查詢中使用它們。

  • DICTIONARY − 這些索引類似於使用UNIQUE的索引,但在重複鍵的情況下,它們會將現有記錄替換為新記錄。

雜湊索引

它執行速度更快,並且磁碟使用率非常低。它是永續性的、事務性的,但不支援範圍查詢。它的工作方式類似於HASHMAP,這使得它在精確查詢方面速度更快,並且比其他索引型別消耗更少的資源。支援此演算法的不同型別外掛有:

  • UNIQUE_HASH_INDEX − 這些索引不允許重複鍵。對於複合索引,這指的是複合鍵的唯一性。

  • NOTUNIQUE_HASH_INDEX − 這些索引允許重複鍵。

  • FULLTEXT_HASH_INDEX − 這些索引基於任何單個文字單詞。您可以透過CONTAINSTEXT運算子在查詢中使用它們。

  • DICTIONARY_HASH_INDEX − 這些索引類似於使用UNIQUE_HASH_INDEX的索引,但在重複鍵的情況下,它們會將現有記錄替換為新記錄。

Lucene全文索引

它提供良好的全文索引,但不能用於索引其他型別。它是永續性的、事務性的,並支援範圍查詢。

Lucene空間索引

它提供良好的空間索引,但不能用於索引其他型別。它是永續性的、事務性的,並支援範圍查詢。

建立索引

建立索引是用於在特定模式上建立索引的命令。

以下語句是建立索引的基本語法。

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表示。

示例

嘗試以下查詢以建立繫結到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)

查詢索引

您可以使用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 INDEX <name>

其中<name>提供您要刪除的索引的名稱。

嘗試以下查詢以刪除sales_user使用者的名為“ID”的索引。

DROP INDEX sales_users.Id 

如果以上查詢成功執行,您將獲得以下輸出。

Index dropped successfully 

OrientDB - 事務

與RDBMS一樣,OrientDB支援事務ACID屬性。事務包括在資料庫管理系統內執行的工作單元。在資料庫環境中維護事務有兩個主要原因。

  • 允許從故障中併發恢復,即使在系統故障的情況下也能保持資料庫的一致性。

  • 提供併發訪問資料庫的程式之間的隔離。

預設情況下,資料庫事務必須遵循ACID屬性,例如原子性、一致性、隔離性和永續性。但OrientDB是一個符合ACID的資料庫,這意味著它不會與ACID概念相矛盾或否定它,而是在處理NoSQL資料庫時會改變其認知。讓我們看看ACID屬性如何與NoSQL資料庫一起工作。

原子性 − 當您執行某些操作來更改資料庫時,更改應該整體生效或整體失敗。

一致性 − 資料庫應該保持一致。

隔離性 − 如果其他事務執行正在同時執行,則使用者將無法看到併發執行中的記錄。

永續性 − 如果系統崩潰(硬體或軟體),資料庫本身應該能夠進行備份。

資料庫事務可以透過使用Commit和Rollback命令來實現。

Commit

Commit表示透過將所有更改儲存到資料庫來關閉事務。Rollback表示將資料庫狀態恢復到開啟事務時的狀態。

以下語句是COMMIT資料庫命令的基本語法。

COMMIT

注意 − 只有在連線到特定資料庫並在開始事務後才能使用此命令。

示例

在本例中,我們將使用教程前面章節中建立的同名數據庫“demo”。我們將瞭解事務提交的操作,並使用事務儲存記錄。

您需要首先使用以下 BEGIN 命令啟動事務。

orientdb {db = demo}> BEGIN

使用以下命令將一條記錄插入到 employee 表中,其值為 id = 12 和 name = satish.P。

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

可以使用以下命令提交事務。

orientdb> commit

如果此事務成功提交,您將獲得以下輸出。

Transaction 2 has been committed in 4ms

回滾

回滾意味著將資料庫狀態恢復到您開啟事務時的狀態。

以下語句是 ROLLBACK 資料庫命令的基本語法。

ROLLBACK

注意 − 只有在連線到特定資料庫並在開始事務後才能使用此命令。

示例

在本例中,我們將使用教程前面章節中建立的同名數據庫“demo”。我們將瞭解事務回滾的操作,並使用事務儲存記錄。

您必須首先使用以下 BEGIN 命令啟動事務。

orientdb {db = demo}> BEGIN

使用以下命令將一條記錄插入到 employee 表中,其值為 id = 12 和 name = satish.P。

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 - 鉤子

OrientDB 的**鉤子 (Hooks)** 在資料庫術語中就是觸發器,它允許在使用者應用程式中每次 CRUD 操作之前和之後觸發內部事件。您可以使用鉤子編寫自定義驗證規則,強制執行安全策略,或安排外部事件,例如針對關係型 DBMS 進行復制。

OrientDB 支援兩種型別的鉤子:

**動態鉤子 (Dynamic Hook)** - 可以在類級別和/或文件級別構建的觸發器。

**Java(原生)鉤子 (Java (Native) Hook)** - 使用 Java 類構建的觸發器。

動態鉤子

動態鉤子比 Java 鉤子更靈活,因為它們可以在執行時更改,並且如果需要可以針對每個文件執行,但速度比 Java 鉤子慢。

要對您的文件執行鉤子,首先允許您的類擴充套件**OTriggered**基類。然後,為感興趣的事件定義一個自定義屬性。以下是可用的事件:

  • **onBeforeCreate** - 在建立新文件**之前**呼叫。

  • **onAfterCreate** - 在建立新文件**之後**呼叫。

  • **onBeforeRead** - 在讀取文件**之前**呼叫。

  • **onAfterRead** - 在讀取文件**之後**呼叫。

  • **onBeforeUpdate** - 在更新文件**之前**呼叫。

  • **onAfterUpdate** - 在更新文件**之後**呼叫。

  • **onBeforeDelete** - 在刪除文件**之前**呼叫。

  • **onAfterDelete** - 在刪除文件**之後**呼叫。

動態鉤子可以呼叫:

  • 用 SQL、Javascript 或 OrientDB 和 JVM 支援的任何語言編寫的函式。

  • Java 靜態方法。

類級別鉤子

類級別鉤子是為與某個類相關的所有文件定義的。以下是如何設定一個針對 Invoice 文件在類級別起作用的鉤子的示例。

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

文件級別鉤子

您可以僅針對一個或多個文件定義特殊操作。為此,請允許您的類擴充套件**OTriggered**類。

例如,讓我們針對現有的 Profile 類執行一個觸發器(作為 Javascript 函式),用於所有具有屬性 account = 'Premium' 的文件。將呼叫觸發器以防止刪除文件。

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 鉤子

OrientDB 鉤子(觸發器)的一個常見用例是管理任何或所有類的建立日期和更新日期。例如,您可以每當建立記錄時設定一個**CreatedDate**欄位,每當更新記錄時設定一個**UpdatedDate**欄位,並且以一種在資料庫層實現邏輯一次,而無需再次在應用程式層處理它的方式來實現。

在建立之前,您需要透過訪問以下連結下載**orientdb-core.jar**檔案 下載 OrientDB core。然後將該 jar 檔案複製到您要儲存 Java 原始檔的資料夾中。

建立鉤子檔案

建立一個名為**HookTest.java**的 Java 檔案,該檔案將使用 Java 語言測試 Hook 機制。

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。

編譯 Java 鉤子

使用以下命令編譯 Java 程式碼。**注意:**將下載的 jar 檔案和這些 Java 檔案放在同一個資料夾中。

$ jar cf hooks-1.0-SNAPSHOT.jar *.java

將編譯後的程式碼移動到 OrientDB 伺服器可以找到的位置

您需要將生成的 .jar 檔案複製到 OrientDB 伺服器將查詢它們的目錄。這意味著您的 OrientDB 伺服器根目錄下的“**./lib**”資料夾將如下所示:

$ cp hooks-1.0-SNAPSHOT.jar "$ORIENTDB_HOME/lib"

在 OrientDB 伺服器配置檔案中啟用測試鉤子

編輯**$ORIENTDB_HOME/config/orientdb-server-config.xml**並在檔案末尾附近新增以下部分。

   <hooks> 
      <hook class = "HookTest" position = "REGULAR"/> 
   </hooks> 
   ... 
</orient-server>

重新啟動 OrientDB 伺服器

重新啟動 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

在 OrientDB 伺服器配置檔案中啟用真實鉤子

編輯**$ORIENTDB_HOME/config/orientdb-server-config.xml**並將鉤子部分更改為如下所示:

   <hooks> 
      <hook class="setCreatedUpdatedDates" position="REGULAR"/> 
   </hooks> 
   ... 
</orient-server>

重新啟動 OrientDB 伺服器

建立一個以字母“**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 
----+-----+------+----+-----------+-----------

即使您沒有指定要為**CreatedDate**和**UpdatedDate**設定的值,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 鉤子可以成為一個非常有價值的工具,可以幫助自動化您原本必須在應用程式程式碼中執行的工作。由於許多 DBA 並非總是 Java 專家,因此本教程中包含的資訊希望能為您提供一個良好的開端,讓您對這項技術感到滿意,從而使您能夠在需要時成功建立資料庫觸發器。

OrientDB - 快取

**快取 (Caching)** 是一種概念,它將建立資料庫表結構的副本,為使用者應用程式提供一個舒適的環境。OrientDB 在不同級別具有多種快取機制。

下圖說明了快取的概念。

Caching Mechanisms

在上圖中,**DB1**、**DB2**、**DB3** 是應用程式中使用的三個不同的資料庫例項。

**一級 (Level-1)** 快取是**本地快取 (Local cache)**,它儲存特定會話已知的全部實體。如果此會話中有三個事務,它將儲存所有三個事務使用的所有實體。當您關閉會話或執行“clear”方法時,此快取將被清除。它減少了應用程式和資料庫之間的 I/O 操作負擔,進而提高了效能。

**二級 (Level-2)** 快取是**實際快取 (Real cache)**,它透過使用第三方提供程式來工作。您可以完全控制快取的內容,即您可以指定哪些條目應被刪除,哪些條目應儲存更長時間等等。它是多個執行緒之間共享的完整快取。

**儲存模型 (Storage model)** 就是儲存裝置,可以是磁碟、記憶體或遠端伺服器。

OrientDB 中快取的工作原理?

OrientDB 快取在不同的環境中提供不同的方法。快取主要用於加快資料庫事務,減少事務的處理時間並提高效能。以下流程圖顯示了快取在本地模式和客戶端-伺服器模式下的工作方式。

本地模式(嵌入式資料庫)

以下流程圖說明了記錄在本地模式(即資料庫伺服器在您的本地主機上)中儲存和使用應用程式之間的過程。

Embedded Database

當客戶端應用程式請求記錄時,OrientDB 檢查以下內容:

  • 如果已開始事務,則它會在事務內搜尋已更改的記錄,如果找到則返回。

  • 如果啟用了本地快取並且包含請求的記錄,則返回。

  • 如果此時快取中沒有記錄,則向儲存(磁碟、記憶體)請求。

客戶端伺服器模式(遠端資料庫)

以下流程圖說明了記錄在客戶端-伺服器模式(即資料庫伺服器位於遠端位置)中儲存和使用應用程式之間的過程。

Remote Database

當客戶端應用程式請求記錄時,OrientDB 檢查以下內容:

  • 如果已開始事務,則它會在事務內搜尋已更改的記錄,如果找到則返回。

  • 如果啟用了本地快取並且包含請求的記錄,則返回。

  • 此時,如果快取中沒有記錄,則透過 TCP/IP 呼叫向伺服器請求。

  • 在伺服器上,如果啟用了本地快取並且包含請求的記錄,則返回。

  • 此時,伺服器中仍然沒有快取記錄,則向儲存(磁碟、記憶體)請求。

OrientDB - 日誌

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 中。它們是:

  • SEVERE(最高值)
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST(最低值)

預設情況下,安裝了兩個記錄器:

  • **Console**,作為啟動應用程式/伺服器的 shell/命令提示符的輸出。可以透過設定變數“log.console.level”來更改。

  • **File**,作為對日誌檔案的輸出。可以透過設定“log.file.level”來更改。

配置日誌記錄

可以使用遵循 Java 的檔案配置日誌記錄策略。

**語法** - Java 日誌記錄配置。

示例

複製**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 ... 

設定日誌級別

要更改日誌級別而不修改日誌記錄配置,只需將“**log.console.level**”和“**log.file.level**”系統變數設定為請求的級別。

啟動時記錄日誌

以下是透過不同方式設定啟動級別日誌記錄的過程。

在伺服器配置中

開啟檔案**orientdb-server-config.xml**並在<properties>部分的結尾新增或更新以下幾行:

<entry value = "fine" name = "log.console.level" /> 
<entry value = "fine" name = "log.file.level" /> 

在 Server.sh(或 .bat)指令碼中

使用java的-D引數設定系統屬性“log.console.level”和“log.file.level”到您想要的級別。

$ java -Dlog.console.level = FINE ... 

執行時日誌記錄

以下是透過不同方式設定啟動級別日誌記錄的過程。

使用Java程式碼

可以使用System.setProperty() API在啟動時設定系統變數。以下程式碼片段是使用Java程式碼設定日誌級別的語法。

public void main(String[] args){ 
   System.setProperty("log.console.level", "FINE"); 
   ... 
}

遠端伺服器上

對URL執行HTTP POST請求:/server/log.<type>/<level>,其中−

  • <type>可以是“console”或“file”
  • <level>是支援的級別之一

示例

以下示例使用cURL對OrientDB伺服器執行HTTP POST命令。使用了伺服器的“root”使用者和密碼,請替換為您的密碼。

啟用控制檯的精細跟蹤級別−

curl -u root:root -X POST https://:2480/server/log.console/FINEST 

啟用檔案的精細跟蹤級別−

curl -u root:root -X POST https://:2480/server/log.file/FINEST 

OrientDB - 效能調優

本章將提供一些關於如何最佳化使用OrientDB的應用程式的通用技巧。有三種方法可以提高不同型別資料庫的效能。

  • 文件資料庫效能調優 − 它使用一種技術來幫助避免為每個新文件建立文件。

  • 物件資料庫效能調優 − 它使用通用技術來提高效能。

  • 分散式配置調優 − 它使用不同的方法來提高分散式配置的效能。

您可以透過更改記憶體、JVM和遠端連線設定來實現通用的效能調優。

記憶體設定

記憶體設定中有不同的策略可以提高效能。

伺服器和嵌入式設定

這些設定同時適用於伺服器元件和使用OrientDB嵌入模式(直接使用plocal)執行Java應用程式的JVM。

調優最重要的方面是確保記憶體設定正確。堆和記憶體對映使用的虛擬記憶體之間的正確平衡可以產生真正的差異,尤其是在大型資料集(GB、TB及更多)中,記憶體快取結構的重要性低於原始IO。

例如,如果您最多可以為Java程序分配8GB記憶體,通常最好分配較小的堆和較大的磁碟快取緩衝區(堆外記憶體)。

嘗試使用以下命令來增加堆記憶體。

java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ... 

storage.diskCache.bufferSize設定(在舊的“local”儲存中為file.mmap.maxMemory)以MB為單位,指示磁碟快取元件要使用多少記憶體。預設值為4GB。

注意 − 如果最大堆和磁碟快取緩衝區的總和過高,可能會導致作業系統進行交換,從而導致嚴重減速。

JVM設定

JVM設定編碼在server.sh(和server.bat)批處理檔案中。您可以更改它們以根據您的使用情況和硬體/軟體設定來調整JVM。在server.bat檔案中新增以下行。

-server -XX:+PerfDisableSharedMem 

此設定將停用寫入有關JVM的除錯資訊。如果您需要分析JVM,只需刪除此設定即可。

遠端連線

使用遠端連線訪問資料庫時,有很多方法可以提高效能。

獲取策略

使用遠端資料庫時,您必須注意使用的獲取策略。預設情況下,OrientDB客戶端僅載入結果集中包含的記錄。例如,如果查詢返回100個元素,但如果從客戶端交叉這些元素,則OrientDB客戶端將延遲載入元素,每次缺少記錄時都會對伺服器進行一次額外的網路呼叫。

網路連線池

預設情況下,每個客戶端僅使用一個網路連線與伺服器通訊。同一客戶端上的多個執行緒共享相同的網路連線池。

當您有多個執行緒時,可能會出現瓶頸,因為大量時間都花在了等待空閒網路連線上。這就是為什麼配置網路連線池非常重要的原因。

配置非常簡單,只有兩個引數−

  • minPool − 這是連線池的初始大小。預設值配置為全域性引數“client.channel.minPool”。

  • maxPool − 這是連線池可以達到的最大大小。預設值配置為全域性引數“client.channel.maxPool”。

如果所有池連線都繁忙,則客戶端執行緒將等待第一個空閒連線。

使用資料庫屬性進行配置的示例命令。

database = new ODatabaseDocumentTx("remote:localhost/demo"); 
database.setProperty("minPool", 2); 
database.setProperty("maxPool", 5);  

database.open("admin", "admin");

分散式配置調優

有很多方法可以提高分散式配置的效能。

使用事務

即使更新圖形,也應始終在事務中工作。OrientDB允許您在事務之外工作。常見的情況是隻讀查詢或大規模的非併發操作,可以在發生故障時恢復。在分散式配置上執行時,使用事務有助於減少延遲。這是因為分散式操作僅在提交時發生。由於延遲的原因,分佈一個大型操作比傳輸多個小型操作效率更高。

複製與分片

OrientDB分散式配置設定為完全複製。擁有多個具有相同資料庫副本的節點對於擴充套件讀取非常重要。事實上,每個伺服器在執行讀取和查詢方面都是獨立的。如果您有10個伺服器節點,則讀取吞吐量為10倍。

對於寫入,則相反:如果複製是同步的,則擁有多個具有完全複製的節點會減慢操作速度。在這種情況下,跨多個節點對資料庫進行分片允許您擴充套件寫入,因為只有一部分節點參與寫入。此外,您的資料庫可以大於一個伺服器節點的硬碟。

擴充套件寫入

如果您網路緩慢並且使用了同步(預設)複製,則您可能需要承擔延遲的成本。事實上,當OrientDB同步執行時,它至少會等待writeQuorum。這意味著如果writeQuorum為3,而您有5個節點,則協調器伺服器節點(在其中啟動分散式操作)必須等待來自至少3個節點的答覆才能向客戶端提供答覆。

為了保持一致性,writeQuorum應設定為多數。如果您有5個節點,則多數為3。對於4個節點,它仍然是3。將writeQuorum設定為3而不是4或5可以減少延遲成本,同時仍然保持一致性。

非同步複製

為了加快速度,您可以設定非同步複製以消除延遲瓶頸。在這種情況下,協調器伺服器節點在本地執行操作並向客戶端提供答覆。整個複製將在後臺進行。如果未達到配額,則更改將被透明地回滾。

擴充套件讀取

如果您已將writeQuorum設定為節點的大多數,則可以將readQuorum保留為1(預設值)。這將加快所有讀取速度。

OrientDB - 升級

升級時,您必須考慮版本號和格式。有三種類型的格式 - MAJOR、MINOR、PATCH。

  • MAJOR版本包含不相容的API更改。

  • MINOR版本以向後相容的方式包含功能。

  • PATCH版本包含向後相容的錯誤修復。

為了在次要版本和主要版本之間同步,您可能需要匯出和匯入資料庫。有時您可能需要將資料庫從LOCAL遷移到PLOCAL,並且需要將圖形遷移到RidBag。

從LOCAL儲存引擎遷移到PLOCAL

從1.5.x版本開始,OrientDB提供了一個全新的儲存引擎:PLOCAL(分頁LOCAL)。它像LOCAL一樣是永續性的,但以不同的方式儲存資訊。以下幾點顯示了PLOCAL和LOCAL之間的比較−

  • 在PLOCAL中,記錄儲存在叢集檔案中,而LOCAL則在叢集和資料段之間分割。

  • 由於追加寫入模式,PLOCAL比LOCAL更持久。

  • PLOCAL在寫入上的爭用鎖較少,這意味著更高的併發性。

  • PLOCAL不使用記憶體對映技術(MMap),因此行為更“可預測”。

要將您的LOCAL儲存遷移到新的PLOCAL,您需要使用PLOCAL作為儲存引擎匯出並重新匯入資料庫。以下是該過程。

步驟1 − 開啟一個新的shell(Linux/Mac)或命令提示符(Windows)。

步驟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

步驟3 − 在本地檔案系統上,使用“plocal”引擎建立一個新的資料庫−

orientdb> CREATE DATABASE plocal:/temp/newdb admin admin plocal graph 

步驟4 − 將舊資料庫匯入到新資料庫。

orientdb> IMPORT DATABASE /temp/demo.json.gzip -preserveClusterIDs=true 
orientdb> QUIT

如果您在相同的JVM中訪問資料庫,請記住將URL從“local:”更改為“plocal:”

將圖形遷移到RidBag

從OrientDB 1.7開始,RidBag是管理圖形中鄰接關係的預設集合。雖然由MVRB-Tree管理的舊資料庫完全相容,但您可以將資料庫更新到最新的格式。

您可以透過控制檯或使用ORidBagMigration類來升級您的圖形。

  • 連線到資料庫 CONNECT plocal:databases/<graphdb-name>

  • 執行升級圖形命令

OrientDB - 安全性

與RDBMS一樣,OrientDB還提供基於眾所周知的概念、使用者和角色的安全機制。每個資料庫都有其自己的使用者,每個使用者都有一個或多個角色。角色是工作模式和許可權集的組合。

使用者

預設情況下,OrientDB為伺服器中的所有資料庫維護三個不同的使用者−

  • Admin − 此使用者可以無限制地訪問資料庫上的所有功能。

  • Reader − 此使用者是隻讀使用者。閱讀器可以查詢資料庫中的任何記錄,但不能修改或刪除它們。它無權訪問內部資訊,例如使用者和角色本身。

  • Writer − 此使用者與閱讀器使用者相同,但它還可以建立、更新和刪除記錄。

使用使用者

連線到資料庫後,您可以使用SELECT查詢在OUser類上查詢資料庫上的當前使用者。

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). 

建立新使用者

要建立新使用者,請使用INSERT命令。請記住,這樣做時,必須將狀態設定為ACTIVE並賦予其有效的角色。

orientdb> INSERT INTO OUser SET 
               name = 'jay', 
               password = 'JaY',
               status = 'ACTIVE',
               roles = (SELECT FROM ORole WHERE name = 'reader')

更新使用者

您可以使用UPDATE語句更改使用者的名稱。

orientdb> UPDATE OUser SET name = 'jay' WHERE name = 'reader'

同樣,您也可以更改使用者的密碼。

orientdb> UPDATE OUser SET password = 'hello' WHERE name = 'reader'

OrientDB以雜湊格式儲存密碼。觸發器OUserTrigger在儲存記錄之前會透明地加密密碼。

停用使用者

要停用使用者,請使用 UPDATE 將其狀態從 ACTIVE 切換到 SUSPENDED。例如,如果您想停用除管理員以外的所有使用者,請使用以下命令:

orientdb> UPDATE OUser SET status = 'SUSPENDED' WHERE name <> 'admin'

角色

角色決定使用者可以對資源執行哪些操作。主要取決於工作模式和規則。規則本身的工作方式不同,取決於工作模式。

使用角色

連線到資料庫後,您可以使用**SELECT** 查詢在**ORole** 類上查詢資料庫上的當前角色。

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). 

建立新角色

要建立新角色,請使用 INSERT 語句。

orientdb> INSERT INTO ORole SET name = 'developer', mode = 0 

使用模式

規則決定屬於特定角色的使用者可以在資料庫上執行哪些操作,而工作模式則決定 OrientDB 如何解釋這些規則。有兩種工作模式,分別用 1 和 0 表示。

  • **允許所有操作,但(規則)除外** - 預設情況下,這是超級使用者模式。使用規則指定對此的例外。如果 OrientDB 未找到請求資源的規則,則允許使用者執行該操作。此模式主要用於高階使用者和管理員。預設角色 admin 預設使用此模式,並且沒有例外規則。在資料庫中寫為 1。

  • **拒絕所有操作,但(規則)除外** - 預設情況下,此模式不允許任何操作。使用規則指定對此的例外。如果 OrientDB 找到請求資源的規則,則允許使用者執行該操作。將此模式用作所有經典使用者的預設模式。預設角色 reader 和 writer 使用此模式。在資料庫中寫為 0。

OrientDB - Studio

OrientDB 提供一個 Web UI,可以透過 GUI 執行資料庫操作。本章介紹 OrientDB 中可用的不同選項。

Studio 首頁

Studio 是 OrientDB 的一個 Web 管理介面,包含在 OrientDB 發行版中。

首先,您需要使用以下命令啟動 OrientDB 伺服器。

$ server.sh 

如果您在您的機器上執行 OrientDB,則可以透過以下 URL 訪問 Web 介面:

https://:2480

如果命令執行成功,螢幕上將顯示以下輸出。

Administration of OrientDB

連線到現有資料庫

要登入,請從資料庫列表中選擇一個數據庫並使用任何資料庫使用者。預設情況下,**reader/reader** 可以讀取資料庫中的記錄,**writer/writer** 可以讀取、建立、更新和刪除記錄,而 **admin/admin** 擁有所有許可權。

刪除現有資料庫

從資料庫列表中選擇一個數據庫,然後單擊垃圾桶圖示。Studio 將開啟一個確認彈出視窗,您需要在其中輸入伺服器使用者和伺服器密碼。

然後單擊“刪除資料庫”按鈕。您可以在 **$ORIENTDB_HOME/config/orientdb-server-config.xml** 檔案中找到伺服器憑據。

<users> 
   <user name = "root" password = "pwd" resources = "*" /> 
</users>

建立新資料庫

要建立新資料庫,請單擊首頁上的“新建資料庫”按鈕。

New Database

建立新資料庫需要以下資訊:

  • 資料庫名稱
  • 資料庫型別(文件/圖形)
  • 儲存型別(plocal/memory)
  • 伺服器使用者
  • 伺服器密碼

您可以在 **$ORIENTDB_HOME/config/orientdbserver-config.xml** 檔案中找到伺服器憑據。

<users> 
   <user name = "root" password = "pwd" resources = "*" /> 
</users>

建立後,Studio 將自動登入到新資料庫。

執行查詢

Studio 支援自動識別您使用的語言(在支援的語言之間):SQL 和 Gremlin。在編寫時,按 **Ctrl + Space** 使用自動完成功能。

查詢編輯器中可使用以下快捷鍵:

  • **Ctrl + Enter** - 執行查詢或單擊**執行**按鈕。

  • **Ctrl/Cmd + Z** - 撤消更改。

  • **Ctrl/Cmd + Shift + Z** - 重做更改。

  • **Ctrl/Cmd + F** - 在編輯器中搜索。

  • **Ctrl/Cmd + /** - 切換註釋。

以下螢幕截圖顯示瞭如何執行查詢。

Execute a Query

單擊結果集中的任何 **@rid** 值,如果記錄是文件,則將進入文件編輯模式,否則將進入頂點編輯模式。

您可以透過單擊結果集或編輯器中的星形圖示來為查詢新增書籤。要瀏覽已加書籤的查詢,請單擊**書籤**按鈕。Studio 將在左側開啟書籤列表,您可以在其中編輯/刪除或重新執行查詢。

Bookmarks Query

Studio 將執行的查詢儲存在瀏覽器的本地儲存中。在查詢設定中,您可以配置 Studio 要保留的歷史查詢數量。您還可以搜尋以前執行的查詢、刪除歷史記錄中的所有查詢或刪除單個查詢。

編輯頂點

要編輯圖形的頂點,請轉到“圖形”部分。然後執行以下查詢。

Select From Customer

成功執行查詢後,以下將是輸出螢幕截圖。選擇圖形畫布中的特定頂點進行編輯。

Graph Canvas

選擇特定頂點上的編輯符號。您將看到以下螢幕,其中包含編輯頂點的選項。

Edit Symbol

模式管理器

OrientDB 可以無模式模式、模式模式或兩種模式的混合模式執行。在這裡,我們將討論模式模式。單擊 Web UI 頂部的“模式”部分。您將看到以下螢幕截圖。

Schema Mode

建立新類

要建立新類,只需單擊**新建類**按鈕。將出現以下螢幕截圖。您必須提供螢幕截圖中顯示的以下資訊才能建立新類。

Create New Class

檢視所有索引

當您想要概述資料庫中建立的所有索引時,只需單擊模式 UI 中的“所有索引”按鈕即可。這將提供對索引的一些資訊的快速訪問(名稱、型別、屬性等),您可以從此處刪除或重建它們。

View All Indexes

編輯類

單擊模式部分中的任何類,您將看到以下螢幕截圖。

Edit Class

編輯類時,您可以新增屬性或新增新索引。

新增屬性

單擊“新建屬性”按鈕新增屬性。您將看到以下螢幕截圖。

您必須提供螢幕截圖中顯示的以下詳細資訊才能新增屬性。

Add Property

新增索引

單擊“新建索引”按鈕。您將看到以下螢幕截圖。您必須提供螢幕截圖中顯示的以下詳細資訊才能新增索引。

Add an Index

圖形編輯器

單擊圖形部分。您不僅可以以圖形樣式視覺化您的資料,還可以與圖形互動並修改它。

要填充圖形區域,請在查詢編輯器中鍵入查詢或使用瀏覽 UI 中的“傳送到圖形”功能。

Graph Editor

新增頂點

要在圖形資料庫和圖形畫布區域中新增新的頂點,您必須按下**新增頂點**按鈕。此操作分兩步完成。

第一步,您必須為新的頂點選擇類,然後單擊“下一步”。

Add Vertex

第二步,您必須插入新頂點的欄位值。您還可以新增自定義欄位,因為 OrientDB 支援無模式模式。要使新頂點持久化,請單擊“儲存更改”,頂點將儲存到資料庫並新增到畫布區域。

New Vertex

刪除頂點

單擊要刪除的頂點開啟圓形選單。將滑鼠懸停在更多(...)選單項上開啟子選單,然後單擊垃圾桶圖示。

從畫布中移除頂點

開啟圓形選單,將滑鼠懸停在更多(...)選單項上開啟子選單,然後單擊橡皮擦圖示。

檢查頂點

如果您想快速檢視頂點屬性,請單擊眼睛圖示。

Inspect Vertex

安全性

Studio 2.0 包含新的安全管理,您可以在其中以圖形方式管理使用者和角色。

使用者

您可以執行以下操作來管理資料庫使用者:

  • 搜尋使用者
  • 新增使用者
  • 刪除使用者
  • 編輯使用者:角色可以在內聯編輯,對於名稱、狀態和密碼,請單擊**編輯**按鈕
database users

新增使用者

要新增新使用者,請單擊**新增使用者**按鈕,完成新使用者的資料(名稱、密碼、狀態、角色),然後儲存以將新使用者新增到資料庫。

Add Users

角色

您可以執行以下操作來管理資料庫角色:

  • 搜尋角色
  • 新增角色
  • 刪除角色
  • 編輯角色
Database Roles

新增角色

要新增新使用者,請單擊**新增角色**按鈕,完成新角色的資料(名稱、父角色、模式),然後儲存以將新角色新增到資料庫。

Add Roles

向角色新增規則

要為選定的角色新增新的安全規則,請單擊**新增規則**按鈕。這將要求您輸入要保護的資源的字串。然後,您可以配置新建立資源上的 CRUD 許可權。

Add Role

OrientDB - Java 介面

與 RDBMS 類似,OrientDB 支援 JDBC。為此,首先需要配置 JDBC 程式設計的環境。以下是建立應用程式和資料庫之間連線的過程。

首先,我們需要下載 JDBC 驅動程式。訪問以下連結https://code.google.com/archive/p/orient/downloads下載 OrientDB-JDBC。

以下是實現 OrientDB-jdbc 連線的基本五個步驟。

  • 載入 JDBC 驅動程式
  • 建立連線
  • 建立語句
  • 執行語句
  • 關閉連線

示例

嘗試以下示例以瞭解 OrientDB-JDBC 連線。讓我們假設我們有一個員工表,其中包含以下欄位及其型別。

序號 欄位名稱 型別
1 Id 整數
2 Name 字串
3 薪資 整數
4 入職日期 日期

您可以透過執行以下命令來建立模式(表)。

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 

執行所有命令後,您將獲得包含以下欄位的員工表:員工姓名(含 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 介面

OrientDB 的 Python 驅動程式使用二進位制協議。PyOrient 是 git hub 專案名稱,有助於將 OrientDB 與 Python 連線。它適用於 OrientDB 1.7 及更高版本。

以下命令用於安裝 PyOrient。

pip install pyorient

您可以使用名為 **demo.py** 的指令碼檔案執行以下任務:

  • 建立客戶端例項,即建立連線。

  • 建立名為 **DB_Demo** 的資料庫。

  • 開啟名為 DB_Demo 的資料庫。

  • 建立類 my_class。

  • 建立屬性 id 和 name。

  • 將記錄插入 my_class。

//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
廣告