Orientdb-quick-guide
OrientDB-概要
OrientDBは、オープンソースのNoSQLデータベース管理システムです。 NoSQL Database は、ドキュメントデータやグラフデータなどの表形式データ以外のデータを参照するNO関係データまたは非関係データを格納および取得するためのメカニズムを提供します。 NoSQLデータベースは、ビッグデータおよびリアルタイムWebアプリケーションでますます使用されています。 NoSQLシステムは、SQLに似たクエリ言語をサポートできることを強調するために、「SQLだけではない」とも呼ばれます。
OrientDBもNoSQLファミリーに属します。 OrientDBは、Apache 2ライセンスのオープンソースを備えた1つの製品でドキュメントの柔軟性を備えた第2世代の分散グラフデータベースです。 OrientDBの前にはいくつかのNoSQLデータベースが市場にありましたが、そのうちの1つはMongoDBです。
MongoDBとOrientDB
MongoDBとOrientDBには多くの共通機能が含まれていますが、エンジンは根本的に異なります。 MongoDBは純粋なドキュメントデータベースであり、OrientDBはグラフエンジンを備えたハイブリッドドキュメントです。
Features | MongoDB | OrientDB |
---|---|---|
Relationships | Uses the RDBMS JOINS to create relationship between entities. It has high runtime cost and does not scale when database scale increases. | Embeds and connects documents like relational database. It uses direct, super-fast links taken from graph database world. |
Fetch Plan | Costly JOIN operations. | Easily returns complete graph with interconnected documents. |
Transactions | Doesn’t support ACID transactions, but it supports atomic operations. | Supports ACID transactions as well as atomic operations. |
Query language | Has its own language based on JSON. | Query language is built on SQL. |
Indexes | Uses the B-Tree algorithm for all indexes. | Supports three different indexing algorithms so that the user can achieve best performance. |
Storage engine | Uses memory mapping technique. | Uses the storage engine name LOCAL and PLOCAL. |
OrientDBは、グラフのパワーとドキュメントの柔軟性をスケーラブルで高性能な運用データベースに統合した最初のマルチモデルオープンソースNoSQL DBMSです。
OrientDB-インストール
OrientDBインストールファイルは2つのエディションで利用可能です-
- コミュニティエディション-OrientDBコミュニティエディションは、オープンソースとして0.2ライセンスでApacheによってリリースされます。
- Enterprise Edition -OrientDBエンタープライズエディションは、コミュニティエディション上に構築された独自のソフトウェアとしてリリースされます。 コミュニティ版の拡張機能として機能します。
この章では、OrientDBコミュニティエディションはオープンソースであるため、インストール手順について説明します。
前提条件
コミュニティエディションとエンタープライズエディションの両方は、Java仮想マシン(JVM)を実装する任意のオペレーティングシステムで実行できます。 OrientDBには、1.7以降のバージョンのJavaが必要です。
次の手順を使用して、OrientDBをダウンロードしてシステムにインストールします。
ステップ1-OrientDBバイナリセットアップファイルのダウンロード
OrientDBには、システムにデータベースをインストールするための組み込みセットアップファイルが付属しています。 さまざまなオペレーティングシステム向けに、さまざまなプリコンパイル済みバイナリパッケージ(tarまたはzip形式のパッケージ)を提供します。 OrientDBファイルは、http://orientdb.com/download/[OrientDBのダウンロード]リンクからダウンロードできます。
次のスクリーンショットは、OrientDBのダウンロードページを示しています。 適切なオペレーティングシステムアイコンをクリックして、zipファイルまたはtarファイルをダウンロードできます。
ダウンロードすると、 Downloads フォルダーにバイナリパッケージが取得されます。
ステップ2-OrientDBの抽出とインストール
以下は、さまざまなオペレーティングシステム用にOrientDBを抽出してインストールする手順です。
Linuxの場合
ダウンロード後、 Downloads フォルダーに 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の場合
- ダウンロード後、 Downloads フォルダーに orientdb-community-2.1.9.zip ファイルを取得します。 zip抽出プログラムを使用してzipファイルを抽出します。
- 抽出したフォルダーを C:\ ディレクトリーに移動します。
- 次の値を指定して、2つの環境変数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にあります。
スクリプトファイルを実行する前に、2つの変数を定義するために orientdb.sh ファイルを編集する必要があります。 1つはインストールディレクトリ( /opt/orientdb )へのパスを定義する ORIENTDB_DIR で、2つ目は次のようにOrientDBを実行するユーザー名を定義する ORIENTDB_USER です。
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
次のコマンドを使用して、Orient DBのコンソールにアクセスするために、 $ ORIENTDB_HOME/bin であるOrientDBインストールディレクトリから /usr/bin であるシステムbinディレクトリにconsole.shファイルをコピーします。
$ 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では*サービス*と呼ばれます。
WindowsユーザーがJavaアプリケーションをWindowsサービスとしてラップできるようにする Apache Common Daemon を使用する必要があります。 Apache共通デーモンをダウンロードして登録する手順は次のとおりです。
- Apache Common Daemons for windowsの次のリンクをクリックします。
- common-daemon-1.0.15-bin-windows をクリックしてダウンロードします。
- common-daemon-1.0.15-bin-windows ディレクトリを解凍します。 解凍後、ディレクトリ内に prunsrv.exe および prunmgr.exe ファイルが見つかります。 それらで-
- prunsrv.exe ファイルは、アプリケーションをサービスとして実行するためのサービスアプリケーションです。
- prunmgr.exe ファイルは、Windowsサービスの監視と構成に使用されるアプリケーションです。
- OrientDBインストールフォルダーに移動→新しいディレクトリを作成し、serviceという名前を付けます。
- prunsrv.exe をコピーし、 prunmgr .exe をサービスディレクトリに貼り付けます。
- 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
スクリプトには2つのパラメータが必要です-
- たとえば、jvm.dllの場所。 C:\ ProgramFiles \ java \ jdk1.8.0_66 \ jre \ bin \ server \ jvm.dll
- OrientDBのインストール場所(例: C:\ orientdb-community-2.1.9
- このサービスは、OrientDBGraph.exeファイル(Original 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
タスクマネージャーサービスを開くと、登録済みのサービス名が含まれている次のスクリーンショットが表示されます。
ステップ4-OrientDBインストールの検証
この手順では、次の手順を使用してOrientDBデータベースサーバーのインストールを確認します。
- サーバーを実行してください。
- コンソールを実行します。
- スタジオを実行します。
これは、オペレーティングシステムによって異なります。
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( http://localhost:2480/ )を使用できます。 次のスクリーンショットが表示されます。
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( http://localhost:2480/ )を使用できます。 次のスクリーンショットが表示されます。
スタジオの実行 Orientdb-basic-concepts Orientdb-data-types
OrientDB-コンソールモード
OrientDB Consoleは、OrientDBデータベースおよびサーバーインスタンスに対して動作するように作られたJavaアプリケーションです。 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
エコーを有効にする
パイプラインでコンソールコマンドを実行する場合、それらを表示する必要があります。 最初にプロパティとして設定して、コマンドの「エコー」を有効にします。 以下は、OrientDBコンソールでechoプロパティを有効にする構文です。
orientdb> set echo true
OrientDB-データベースの作成
OrientDBデータベースのSQLリファレンスには、データベースを作成、変更、削除するためのコマンドがいくつか用意されています。
次のステートメントは、Create Databaseコマンドの基本的な構文です。
CREATE DATABASE <database-url> [<user> <password> <storage-type> [<db-type>]]
上記の構文のオプションに関する詳細を次に示します。
*<database-url>* -データベースのURLを定義します。 URLには2つの部分が含まれます。1つは<mode>で、もう1つは<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-データベースの変更
データベースは、要件に応じて変更できるさまざまな属性を持つ重要なデータモデルの1つです。
次の文は、データベース変更コマンドの基本的な構文です。
ALTER DATABASE <attribute-name> <attribute-value>
ここで、 <attribute-name> は変更する属性を定義し、 <attribute-value> はその属性に設定する値を定義します。
次の表は、データベースを変更するためにサポートされる属性のリストを定義しています。
Sr.No. | Attribute Name | Description |
---|---|---|
1 | STATUS | Defines the database’s status between different attributes. |
2 | IMPORTING | Sets the importing status. |
3 | DEFAULTCLUSTERID | Sets the default cluster using ID. By default it is 2. |
4 | DATEFORMAT | Sets the particular date format as default. By default it is "yyyy-MM-dd". |
5 | DATETIMEFORMAT | Sets the particular date time format as default. By default it is "yyyy-MM-dd HH:mm:ss". |
6 | TIMEZONE | Sets the particular time zone. By default it is Java Virtual Machine’s (JVM’s) default time zone. |
7 | LOCALECOUNTRY | Sets the default locale country. By default it is JVM’s default locale country. For example: "GB". |
8 | LOCALELANGUAGE | Sets the default locale language. By default it is JVM’s default locale language. For example: "en". |
9 | CHARSET | Sets the type of character set. By default it is JVM’s default charset. For example: "utf8". |
10 | CLUSTERSELECTION | Sets the default strategy used for selecting the cluster. These strategies are created along with the class creation. Supported strategies are default, roundrobin, and balanced. |
11 | MINIMUMCLUSTERS | Sets the minimum number of clusters to create automatically when a new class is created. By default it is 1. |
12 | CUSTOM | Sets the custom property. |
13 | VALIDATION | Disables or enables the validations for entire database. |
例
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>* -オプションのバックアップタイプ。 2つのオプションのいずれかがあります。
- デフォルト-バックアップ中にデータベースをロックします。
- LVM-バックグラウンドでLVMコピーオンライトスナップショットを使用します。
例
ローカルファイルシステム/opt/orientdb/databases/demoにあるデータベースデモのバックアップを、sample-demo.zipという名前のファイルに保存し、現在のディレクトリに配置します。
次のコマンドを使用して、データベースのデモのバックアップを取得できます。
$ 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コマンドの基本的な構文です。
CONNECT <database-url> <user> <password>
上記の構文のオプションに関する詳細を次に示します。
*<database-url>* -データベースのURLを定義します。 URLには2つの部分が含まれ、一方は<mode>で、もう一方は<path>です。
*<mode>* -モードを定義します、つまり ローカルモードまたはリモートモード。
*<path>* -データベースへのパスを定義します。
*<user>* -データベースに接続するユーザーを定義します。
*<password>* -データベースに接続するためのパスワードを定義します。
例
前の章で「デモ」という名前のデータベースを既に作成しました。 この例では、ユーザーadminを使用して接続します。
次のコマンドを使用して、デモデータベースに接続できます。
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コマンドの基本的な構文です。
DISCONNECT
注意-このコマンドは特定のデータベースに接続した後にのみ使用でき、現在実行中のデータベースのみを閉じます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 デモデータベースから切断します。
次のコマンドを使用して、データベースを切断できます。
orientdb {db = demo}> DISCONNECT
それが正常に切断された場合、次の出力を取得します-
Disconnecting to database [plocal:/opt/orientdb/databases/demo] with user 'admin'…OK
orientdb>
OrientDB-情報データベース
この章では、OrientDBコマンドラインから特定のデータベースの情報を取得する方法について説明します。
次の文は、Infoコマンドの基本的な構文です。
info
注意-このコマンドは特定のデータベースに接続した後にのみ使用でき、現在実行中のデータベースのみの情報を取得します。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 デモデータベースから基本情報を取得します。
次のコマンドを使用して、データベースを切断できます。
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
注-このコマンドは、ローカルまたはリモートサーバーに接続した後にのみ使用できます。
例
データベースのリストを取得する前に、リモートサーバー経由でローカルホストサーバーに接続する必要があります。 localhostインスタンスに接続するためのユーザー名とパスワードはそれぞれゲストとゲストであり、これらは orintdb/config/orientdb-server-config.xml ファイルで構成されていることを思い出してください。
次のコマンドを使用して、localhostデータベースサーバーインスタンスに接続できます。
orientdb> connect remote:localhost 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-データベースのリリース
この章では、OrientDBコマンドラインを使用してデータベースをフリーズ状態から解放する方法を学習できます。
次のステートメントは、Release databaseコマンドの基本的な構文です。
RELEASE DATABASE
注-このコマンドは、フリーズ状態の特定のデータベースに接続した後にのみ使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 前の章でフリーズしたデータベースをリリースします。
次のコマンドを使用して、データベースを解放できます。
Orientdb {db = demo}> RELEASE DATABASE
正常に実行されると、次の出力が得られます。
Database 'demo' was release successfully
OrientDB-構成データベース
この章では、OrientDBコマンドラインを使用して特定のデータベースの構成を表示する方法を学習できます。 このコマンドは、ローカルデータベースとリモートデータベースの両方に適用できます。
構成情報には、有効または無効のデフォルトキャッシュ、そのキャッシュのサイズ、負荷係数の値、マップの最大メモリ、ノードページサイズ、プールの最小サイズと最大サイズなどが含まれます。
次の文は、config databaseコマンドの基本的な構文です。
CONFIG
注意-このコマンドは、特定のデータベースに接続した後にのみ使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。
次のコマンドを使用して、デモデータベースの構成を表示できます。
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>
注意-このコマンドは、特定のデータベースに接続した後にのみ使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 「tx.autoRetry」変数の値を5に変更します。
次のコマンドを使用して、デモデータベースの構成を設定できます。
orientdb {db = demo}> CONFIG SET tx.autoRetry 5
正常に実行されると、次の出力が得られます。
Local configuration value changed correctly
構成取得
*CONFIG GET* コマンドを使用して、構成変数の値を表示できます。
次の文は、config getコマンドの基本的な構文です。
CONFIG GET <config-variable>
注意-このコマンドは、特定のデータベースに接続した後にのみ使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 「tx.autoRetry」変数値を取得しようとします。
次のコマンドを使用して、デモデータベースの構成を表示できます。
orientdb {db = demo}> CONFIG GET tx.autoRetry
正常に実行されると、次の出力が得られます。
Local configuration: tx.autoRetry = 5
OrientDB-データベースのエクスポート
RDBMSと同様に、OrientDBはデータベースのエクスポートやインポートなどの機能も提供します。 OrientDBはJSON形式を使用してデータをエクスポートします。 デフォルトでは、exportコマンドはGZIPアルゴリズムを使用してファイルを圧縮します。
データベースをエクスポートしている間、データベースはロックされていません。つまり、データベースに対して同時読み取りおよび書き込み操作を実行できます。 また、読み取りと書き込みの同時操作により、そのデータの正確なコピーを作成できることも意味します。
この章では、OrientDBコマンドラインからデータベースをエクスポートする方法を学習できます。
次の文は、データベースのエクスポートコマンドの基本的な構文です。
EXPORT DATABASE <output file>
注意-このコマンドは、特定のデータベースに接続した後にのみ使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 次のコマンドを使用して、データベースを「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-データベースのコミット
RDBMSと同様に、OrientDBはコミットやロールバックなどのトランザクションの概念も提供します。 *コミット*とは、データベースへのすべての変更を保存してトランザクションを閉じることです。 *ロールバック*は、トランザクションを開いた時点までデータベースの状態を回復することを指します。
次の文は、データベースのコミットコマンドの基本的な構文です。
COMMIT
注-特定のデータベースに接続し、トランザクションを開始した後にのみ、このコマンドを使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 トランザクションをコミットする操作を確認し、トランザクションを使用してレコードを保存します。
まず、次の 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 databaseコマンドの基本的な構文です。
ROLLBACK
注-特定のデータベースに接続し、トランザクションを開始した後にのみ、このコマンドを使用できます。
例
この例では、前の章で作成した「デモ」という名前の同じデータベースを使用します。 ロールバックトランザクションの操作を確認し、トランザクションを使用してレコードを保存します。
まず、次の 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
従業員テーブルから同じレコードを取得するには、選択クエリをもう一度確認してください。
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
ロールバックが正常に実行されると、出力に0レコードが見つかります。
0 item(s) found. Query executed in 0.037 sec(s).
OrientDB-データベースの削除
RDBMSと同様に、OrientDBはデータベースを削除する機能を提供します。 *データベースの削除*は、データベースを完全に削除することを指します。
次の文は、Drop databaseコマンドの基本的な構文です。
DROP DATABASE [<database-name> <server-username> <server-user-password>]
上記の構文のオプションに関する詳細を次に示します。
*<データベース名>* -削除するデータベース名。
*<server-username>* -データベースを削除する権限を持つデータベースのユーザー名。
*<server-user-password>* -特定のユーザーのパスワード。
例
データベースを削除するには、現在開いているデータベースを削除する方法と、特定の名前を指定して特定のデータベースを削除する方法があります。
この例では、前の章で作成した「デモ」という名前のデータベースを使用します。 次のコマンドを使用して、データベース demo を削除できます。
orientdb {db = demo}> DROP DATABASE
このコマンドが正常に実行されると、次の出力が得られます。
Database 'demo' deleted successfully
OR
次のように、別のコマンドを使用してデータベースを削除できます。
orientdb> DROP DATABASE PLOCAL:/opt/orientdb/databases/demo admin admin
このコマンドが正常に実行されると、次の出力が得られます。
Database 'demo' deleted successfully
Orientdb-insert-record Orientdb-display-records
OrientDB-レコードのロード
レコードのロード*は、スキーマから特定のレコードをロードするために使用されます。 レコードをロードすると、レコードIDを使用してレコードがロードされます。 結果セットでは *@ rid シンボルで表されます。
次のステートメントは、LOAD Recordコマンドの基本的な構文です。
LOAD RECORD <record-id>
ここで、 <record-id> は、ロードするレコードのレコードIDを定義します。
特定のレコードのレコードIDがわからない場合は、テーブルに対して任意のクエリを実行できます。 結果セットには、それぞれのレコードのレコードID(@rid)があります。
例
前の章で使用したのと同じ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* はLoad Recordコマンドと同様に機能し、スキーマから特定のレコードをロードするためにも使用されます。 レコードをロードすると、レコードIDを使用してレコードがロードされます。 結果セットでは *@ rid* シンボルで表されます。 主な違いは、Reload recordはキャッシュを無視することです。これは、レコードを変更するために外部同時トランザクションが適用される場合に役立ちます。 最新のアップデートが提供されます。
次の文は、RELOAD Recordコマンドの基本的な構文です。
RELOAD RECORD <record-id>
*<record-id>* は、リロードするレコードのレコードIDを定義します。
特定のレコードのレコードIDがわからない場合は、テーブルに対して任意のクエリを実行できます。 結果セットには、それぞれのレコードのレコードID(@rid)があります。
例
前の章で使用したのと同じ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-レコードのエクスポート
*Export Record* は、ロードされたレコードを要求されサポートされている形式にエクスポートするために使用されるコマンドです。 間違った構文を実行している場合、サポートされている形式のリストが表示されます。 OrientDBはドキュメントデータベースのファミリであるため、JSONはデフォルトでサポートされている形式です。
次のステートメントは、[レコードのエクスポート]コマンドの基本的な構文です。
EXPORT RECORD <format>
ここで、 <Format> は、レコードを取得する形式を定義します。
注-エクスポートコマンドは、ロードされたレコードをレコードIDに基づいてエクスポートします。
例
前の章で使用したのと同じ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 |
+---------------------------------------------------------------------------+
次のクエリを使用して、ロードされたレコード(#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* -ロードと更新の間でレコードをロックする方法を指定します。 *Default* と *Record* を指定する2つのオプションがあります。
*UPSERT* -レコードが存在する場合は更新し、存在しない場合は新しいレコードを挿入します。 2つのクエリを実行する代わりに、単一のクエリを実行するのに役立ちます。
*RETURN* -レコード数の代わりに返す式を指定します。
*LIMIT* -更新するレコードの最大数を定義します。
*TIMEOUT* -タイムアウトする前に更新の実行を許可する時間を定義します。
例
前の章で使用したのと同じCustomerテーブルを考えてみましょう。
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).
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 |28
----+-----+--------+----+-------+----
OrientDB-レコードの切り捨て
- レコードの切り捨て*コマンドは、特定のレコードの値を削除するために使用されます。
次の文は、Truncateコマンドの基本的な構文です。
TRUNCATE RECORD <rid>*
ここで、 <rid> *は切り捨てるレコードIDを示します。 コンマで区切られた複数のRidを使用して、複数のレコードを切り捨てることができます。 切り捨てられたレコードの数を返します。
例
前の章で使用したのと同じCustomerテーブルを考えてみましょう。
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).
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
----+-----+--------+----+-------+----
OrientDB-レコードの削除
*Delete Record* コマンドは、1つ以上のレコードをデータベースから完全に削除するために使用されます。
次のステートメントは、Deleteコマンドの基本的な構文です。
DELETE FROM <Class>|cluster:<cluster>|index:<index>
[LOCK <default|record>]
[RETURN <returning>]
[WHERE <Condition>*]
[LIMIT <MaxRecords>]
[TIMEOUT <timeout>]
上記の構文のオプションに関する詳細を次に示します。
*LOCK* -ロードと更新の間でレコードをロックする方法を指定します。 *Default* と *Record* を指定する2つのオプションがあります。
*RETURN* -レコード数の代わりに返す式を指定します。
*LIMIT* -更新するレコードの最大数を定義します。
*TIMEOUT* -タイムアウトする前に更新の実行を許可する時間を定義します。
注-DELETEを使用して頂点またはエッジを削除しないでください。グラフの整合性に影響します。
例
Customerテーブルについて考えてみましょう。
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).
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
----+-----+--------+----+-------+----
OrientDB-クラスの作成
OrientDBはマルチモデル機能をサポートし、データベースの基本概念にアプローチして理解するためのさまざまな方法を提供します。 ただし、これらのモデルには、ドキュメントデータベースAPIの観点から簡単にアクセスできます。 RDBMSと同様に、OrientDBもストレージの要素としてレコードを使用しますが、ドキュメントタイプを使用します。 ドキュメントはキー/値のペアの形式で保存されます。 概念クラスに属するキー/値ペアとしてフィールドとプロパティを保存しています。
- クラス*はデータモデルの一種であり、概念はオブジェクト指向プログラミングパラダイムから引き出されます。 従来のドキュメントデータベースモデルに基づいて、データはコレクションの形式で保存されますが、リレーショナルデータベースモデルのデータはテーブルに保存されます。 OrientDBは、OPPSパラダイムとともにドキュメントAPIに従います。 概念として、OrientDBのクラスはリレーショナルデータベースのテーブルと最も近い関係にありますが、クラスは(テーブルとは異なり)スキーマレス、スキーマフル、または混合にすることができます。 クラスは他のクラスから継承して、クラスのツリーを作成できます。 各クラスには独自のクラスターがあります(定義されていない場合は、デフォルトで作成されます)。
次の文は、クラス作成コマンドの基本的な構文です。
CREATE CLASS <class>
[EXTENDS <super-class>]
[CLUSTER <cluster-id>*]
[CLUSTERS <total-cluster-number>]
[ABSTRACT]
上記の構文のオプションに関する詳細を次に示します。
*<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のクラスとプロパティは、クラス名、スーパークラス、クラスター、クラスター数、抽象などのそれぞれの属性を持つスキーマを構築するために使用されます。 スキーマ内の既存のクラスの属性を変更または更新する場合は、 Alter Class コマンドを使用する必要があります。
次のステートメントは、クラス変更コマンドの基本的な構文です。
ALTER CLASS <class> <attribute-name> <attribute-value>
上記の構文のオプションに関する詳細を次に示します。
*<class>* -クラス名を定義します。
*<属性名>* -変更する属性を定義します。
*<attribute-value>* -属性に設定する値を定義します。
次の表は、クラス変更コマンドをサポートする属性のリストを定義しています。
Attribute | Type | Description |
---|---|---|
NAME | String | Changes the class name. |
SHORTNAME | String | Defines a short name, (that is, an alias), for the class. Use NULL to remove a short name assignment. |
SUPERCLASS | String | Defines a super-class for the class. To add a new class, you can use the syntax +<class>, to remove it use -<class>. |
OVERSIZE | Decimal number | Defines the oversize factor. |
ADDCLUSTER | String | Adds a cluster to the class. If the cluster doesn’t exist, it creates a physical cluster. Adding clusters to a class is also useful in storing records in distributed servers. |
REMOVECLUSTER | String | Removes a cluster from a class. It does not delete the cluster, only removes it from the class. |
STRICTMODE | - | Enables or disables strict mode. When in strict mode, you work in schema-full mode and cannot add new properties to a record if they are part of the class' schema definition. |
CLUSTERSELECTION | - | Defines the selection strategy in choosing which cluster it uses for new records. |
CUSTOM | - | Defines custom properties. Property names and values must follow the syntax <propertyname>=<value> without spaces between the name and value. |
ABSTRACT | Boolean | Converts class to an abstract class or the opposite. |
例
既存のクラスの属性を更新または変更するいくつかの例を試してみましょう。
次のクエリは、既存のクラス「従業員」のスーパークラス「個人」を定義するために使用されます。
orientdb> ALTER CLASS Employee SUPERCLASS Person
上記のクエリが正常に実行されると、次の出力が得られます。
Class altered successfully
次のクエリは、既存のクラス「従業員」にスーパークラス「人」を追加するために使用されます。
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-クラスターの作成
- クラスター*は、レコード、ドキュメント、または頂点を格納するために使用されるOrientDBの重要な概念です。 簡単に言えば、クラスターはレコードのグループが保存される場所です。 デフォルトでは、OrientDBはクラスごとに1つのクラスターを作成します。 クラスのすべてのレコードは、クラスと同じ名前を持つ同じクラスターに保存されます。 データベースには最大32,767(2 ^ 15-1)個のクラスターを作成できます。
CREATEクラスは、特定の名前でクラスターを作成するために使用されるコマンドです。 クラスターが作成されたら、クラスターを使用して、データモデルの作成中に名前を指定することでレコードを保存できます。 クラスに新しいクラスターを追加する場合は、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 最小のクラスターを選択します。 クラスが、基礎となるすべてのクラスターのサイズのバランスを取ることを許可します。 既存のクラスに新しいクラスターを追加すると、最初に新しいクラスターがいっぱいになります。 |
例
salesという名前のクラスターを作成する例を見てみましょう。
orientdb> CREATE CLUSTER sales
上記のクエリが正常に実行されると、次の出力が得られます。
Cluster created correctly with id #12
OrientDB-クラスターの変更
*Alter Cluster* コマンドは、既存のクラスターの属性を更新します。 この章では、クラスターの属性を追加または変更する方法を学習できます。
次のステートメントは、クラスター変更コマンドの基本構文です。
ALTER CLUSTER <cluster> <attribute-name> <attribute-value>
上記の構文のオプションに関する詳細を次に示します。
*<cluster>* -クラスター名を定義します。
*<属性名>* -変更する属性を定義します。
*<attribute-value>* -この属性に設定する値を定義します。
次の表形式は、クラスター変更コマンドとともに使用できるサポートされている属性のリストを提供します。
Name | Type | Description |
---|---|---|
NAME | String | Changes the cluster name. |
STATUS | String | Changes the cluster status. Allowed values are ONLINE and OFFLINE. By default, clusters are online. |
COMPRESSION | String | Defines the compression type to use. Allowed values are NOTHING, SNAPPY, GZIP, and any other compression types registered in the OCompressionFactory class. |
USE_WAL | Boolean | Defines whether it uses the Journal when OrientDB operates against the cluster |
RECORD_GROW_FACTO R | Integer | Defines the grow factor to save more space on record creation. You may find this useful when you update the record with additional information. |
RECORD_OVERFLOW_GR OW_FACTOR | Integer | Defines grow factor on updates. When it reaches the size limit, is uses this setting to get more space, (factor > 1). |
CONFLICTSTRATEGY | String | Defines the strategy it uses to handle conflicts in the event that OrientDB MVCC finds an update or a delete operation it executes against an old record. |
次の表に、競合戦略のリストを示します。
Sr.No. | Strategy & Description |
---|---|
1 |
Version バージョンが異なる場合に例外をスローします。 これがデフォルト設定です。 |
2 |
Content バージョンが異なる場合は、コンテンツの変更をチェックします。そうでない場合は、例外をスローしないように最新バージョンを使用します。 |
3 |
Automerge 変更をマージします。 |
例
次のクエリ例を試して、クラスターの変更コマンドを学習します。
次のコマンドを実行して、クラスターの名前を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 Commandの基本的な構文です。
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 <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にString型のプロパティ名を作成します。
orientdb> CREATE PROPERTY Employee.name STRING
上記のクエリが正常に実行されると、次の出力が得られます。
Property created successfully with id = 1
OrientDB-ドロッププロパティ
*Drop property* コマンドは、スキーマからプロパティを削除します。 レコードからプロパティ値を削除するのではなく、スキーマを変更するだけです。
次のステートメントは、Drop Property Commandの基本的な構文です。
DROP PROPERTY <class>.<property> [FORCE]
上記の構文のオプションに関する詳細を次に示します。
*<class>* -プロパティが存在するクラスを定義します。
*<property>* -削除するプロパティを定義します。
*[Force]* -プロパティに1つ以上のインデックスが定義されている場合。
例
次のコマンドを試して、クラス「Customer」から「age」プロパティを削除してください。
orientdb> DROP PROPERTY Customer.age
上記のコマンドが正常に実行されると、次の出力が得られます。
Property dropped successfully
OrientDB-頂点の作成
OrientDBデータベースは、ドキュメントデータベースだけでなく、グラフデータベースでもあります。 VertexやEdgeなどの新しい概念を使用して、データをグラフの形式で保存します。 頂点にポリモーフィズムを適用します。 Vertexの基本クラスはVです。
この章では、頂点を作成してグラフデータを保存する方法を学習できます。
次のステートメントは、頂点コマンドの作成の基本的な構文です。
CREATE VERTEX [<class>] [CLUSTER <cluster>] [SET <field> = <expression>[,]*]
上記の構文のオプションに関する詳細を次に示します。
*<class>* -頂点が属するクラスを定義します。
*<cluster>* -頂点を格納するクラスターを定義します。
*<field>* -設定するフィールドを定義します。
*<expression>* -フィールドに設定するエクスプレスを定義します。
例
次の例を試して、頂点の作成方法を理解してください。
次のクエリを実行して、「名前」なしで基本クラス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-頂点を移動
OrientDBの[頂点を移動]コマンドは、1つ以上の頂点を現在の場所から別のクラスまたはクラスターに移動します。 特定の頂点に移動コマンドを適用している場合、この頂点に接続されているすべてのエッジが更新されます。 頂点を移動するクラスターを指定している場合、頂点をターゲットクラスターのサーバー所有者に移動します。
次の文は、頂点移動コマンドの基本的な構文です。
MOVE VERTEX <source> TO <destination>
[SET [<field>=<value>]* [,]]
[MERGE <JSON>]
[BATCH <batch-size>]
上記の構文のオプションに関する詳細を次に示します。
*<source>* -移動する頂点を定義します。 特定の頂点のレコードIDまたは頂点のレコードIDの配列を受け入れます。
*<destination>* -頂点の移動先を定義します。 宛先としてクラスまたはクラスターをサポートします。
*SET* -値をフィールドに設定します。
*MERGE* -JSONを介してフィールドに値を設定します。
*BATCH* -バッチサイズを定義します。
注-このコマンドは、接続されているすべてのエッジを更新しますが、リンクは更新しません。 Graph APIを使用する場合、頂点に接続されたエッジを使用することをお勧めします。
例
次の例を試して、頂点を移動する方法を学んでください。
次のクエリを実行して、レコードID#11:2を持つ1つの頂点を現在の位置からClass 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-頂点を削除
- 頂点削除コマンドは、データベースから頂点を削除するために使用されます。 削除中に、エッジとの一貫性をチェックして維持し、削除された頂点へのすべての相互参照(エッジを含む)を削除します。
次の文は、頂点削除コマンドの基本的な構文です。
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)
次のコマンドを実行して、プロパティ「isSpam」でマークされたクラス「Customer」からすべての頂点を削除します。
orientdb> DELETE VERTEX Customer WHERE isSpam = TRUE
上記のコマンドが正常に実行されると、次の出力が得られます。
Delete record(s) '3' in 0.005000 sec(s)
OrientDB-エッジの作成
OrientDBでは、 Edge という概念は、いくつかのプロパティを使用して頂点間の関係のように機能します。 エッジと頂点は、グラフデータベースの主要なコンポーネントです。 エッジにポリモーフィズムを適用します。 Edgeの基本クラスはEです。 エッジの実装中に、ソースまたはデスティネーションの頂点が欠落しているか存在しない場合、トランザクションはロールバックされます。
次のステートメントは、Create Edge Commandの基本的な構文です。
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* -コマンドをより小さなブロックに分割するかどうか、およびバッチのサイズを定義します。
例
次のクエリを実行して、2つの頂点#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* コマンドは、現在のデータベースのエッジレコードを更新するために使用されます。 これは、 *out* および *in* プロパティを更新する場合に、頂点とのグラフの一貫性を確認および維持することに加えて、実際の更新コマンドと同等です。
次の文は、Update Edge Commandの基本的な構文です。
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>* -更新するエッジを定義します。 クラスごとにエッジを更新する*クラス*、クラスタープレフィックスを使用してクラスターごとにエッジを更新する*クラスター*、またはレコードIDでエッジを更新する*レコードID *から選択できます。
*SET* -フィールドを指定された値に更新します。
*INCREMENT* -値で指定されたフィールドをインクリメントします。
*ADD* -フィールドのコレクションに追加するアイテムを定義します。
*REMOVE* -フィールドのコレクションから削除するアイテムを定義します。
*PUT* -マップフィールドに入力するエントリを定義します。
*RETURN* -更新の実行後に返す式を定義します。
*WHERE* -フィルタ条件を定義します。
*LOCK* -ロードと更新の間でレコードをロックする方法を定義します。
*LIMIT* -レコードの最大数を定義します。
例
エリアID = 001、および人名=クリシュナを持つアドレステーブルからデータを取得して、人クラスの「住所」という名前のエッジを更新する例を考えてみましょう。
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-関数
この章では、OrientDBのさまざまなタイプの関数の完全なリファレンスについて説明します。 次の表は、機能別に分類された機能のリストを定義しています。
グラフ関数
____グラフデータを操作するために使用される関数。
Sr.No. | Function Name & Description |
---|---|
1 |
Out(): 現在のレコードから始まる隣接する発信頂点を頂点として取得します。 構文-out([<label-1>] [、<label-n>] *) |
2 |
In(): 現在のレコードから開始する隣接する着信頂点を頂点として取得します。 構文-in([<label-1>] [、<label-n>] *) |
3 |
Both(): 現在のレコードから始まる隣接する発信および着信頂点を頂点として取得します。 構文-both([<label1>] [、<label-n>] *) |
4 |
outE(): 現在のレコードから始まる隣接する出力エッジを頂点として取得します。 構文-outE([<label1>] [、<label-n>] *) |
5 |
inE(): 現在のレコードから始まる隣接する着信エッジを頂点として取得します。 構文-inE([<label1>] [、<label-n>] *) |
6 |
bothE(): 現在のレコードから開始する隣接する発信エッジと着信エッジを頂点として取得します。 構文-bothE([<label1>] [、<label-n>] *) |
7 |
outV(): 現在のレコードから開始する発信頂点をEdgeとして取得します。 構文-outV() |
8 |
inV(): エッジとして現在のレコードから着信頂点を取得します。 構文-inV() |
9 |
traversedElement(): トラバースコマンドでトラバースされた要素を返します。 構文-traversedElement(<index> [、<items>]) |
10 |
traversedVertex(): トラバースコマンドでトラバースされた頂点を返します。 構文-traversedVertex(<index> [、<items>]) |
11 |
traversedEdge(): トラバースコマンドでトラバースされたエッジを返します。 構文-traversedEdge(<index> [、<items>]) |
12 |
shortestPath(): 2つの頂点間の最短パスを返します。 方向は、OUT(デフォルト)、IN、またはBOTHです。
|
13 |
dijkstra(): ダイクストラアルゴリズムを使用して、2つの頂点間の最も安価なパスを返します。 構文-dijkstra(<sourceVertex>、<destinationVertex>、<weightEdgeFieldName> [、<direction>]) |
次のクエリとともにいくつかのグラフ関数を試してください。
次のクエリを実行して、すべてのビークル頂点からすべての発信頂点を取得します。
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
---+----------+-------+-------
数学関数
____次の表は、数式の実行に使用される数学関数のリストを定義しています。
Sr.No. | Function Name & Description |
---|---|
1 |
eval(): 引用符(または二重引用符)間の式を評価します。 構文-eval( '<expression>') |
2 |
min(): 最小値を返します。 複数のパラメーターで呼び出された場合、すべての引数間の最小引数値を返します。 構文-min(<field> [、<field-n>] *) |
3 |
max(): 最大値を返します。 複数のパラメーターで呼び出された場合、すべての引数間の最大値を返します。 構文-max(<field> [、<field-n>] *) |
4 |
sum() 返されたすべての値の合計を返します。 構文-sum(<field>) |
5 |
abs(): 絶対値を返します。 Integer、Long、Short、Double、Float、BigInteger、BigDecimal、nullで動作します。 構文-abs(<field>) |
6 |
avg(): 平均値を返します。 構文-avg(<field>) |
7 |
count(): クエリ条件に一致するレコードをカウントします。 *がフィールドとして使用されていない場合、レコードは、コンテンツがnullでない場合にのみカウントされます。 構文-count(<field>) |
8 |
mode(): 最大の頻度で発生する値を返します。 計算ではヌルは無視されます。 構文-mode(<field>) |
9 |
median(): 値がソートされた後、中間値または中間値を表す補間値を返します。 計算ではヌルは無視されます。 構文-中央値(<フィールド>) |
10 |
percentile(): n番目のパーセンタイルを返します。 計算ではヌルは無視されます。 構文-パーセンタイル(<field> [、<quantile-n>] *) |
11 |
variance() 中間分散を返します:平均からの差の二乗の平均。 構文-分散(<フィールド>) |
12 |
stddev() 標準偏差を返します。値がどのように広がっているかの尺度。 計算ではヌルは無視されます。 構文-stddev(<field>) |
次のクエリを使用して、いくつかの数学関数を試してください。
次のクエリを実行して、すべての従業員の給与の合計を取得します。
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
---+----------+---------
コレクション関数
____次の表は、コレクションデータを操作する関数のリストを定義しています。
Sr.No. | Function Name & Description |
---|---|
1 |
set(): 値をセットに追加します。 値がコレクションの場合は、セットとマージされます。それ以外の場合は、<value>が追加されます。 構文-set(<field>) |
2 |
map(): マップが最初に作成されたときにマップに値を追加します。 <値>がマップの場合、マップとマージされます。それ以外の場合、<キー>と<値>のペアが新しいエントリとしてマップに追加されます。 構文-map(<key>、<value>) |
3 |
ist(): リストが最初に作成されたときにリストに値を追加します。 <値>がコレクションの場合、リストとマージされます。それ以外の場合、<値>がリストに追加されます。 構文-list(<field>) |
4 |
difference(): 集約またはインラインとして機能します。 引数が1つだけ渡された場合は、集約され、そうでなければ実行され、パラメーターとして受け取ったコレクション間のDIFFERENCEを返します。 構文-差(<field> [、<field-n>] *) |
5 |
first(): 複数値フィールド(配列、コレクション、マップ)の最初のアイテムのみを取得します。 複数値以外の型の場合、値を返すだけです。 構文-first(<field>) |
6 |
intersect(): 集約またはインラインとして機能します。 引数が1つだけ渡された場合、パラメーターとして受け取ったコレクションのINTERACTIONを集約し、そうでなければ実行して返します。 構文-intersection(<field> [、<field-n>] *) |
7 |
distinct(): 引数として指定したフィールドに応じて、一意のデータエントリのみを取得します。 標準のSQL DISTINCTと比較した主な違いは、OrientDBでは、括弧を持ち、1つのフィールドのみを指定できる関数です。 構文-distinct(<field>) |
8 |
expand(): この関数には2つの意味があります
構文-expand(<field>) |
9 |
unionall(): 集約またはインラインとして機能します。 引数が1つしか渡されない場合は集約され、そうでない場合はパラメーターとして受け取ったすべてのコレクションのUNIONを実行して返します。 コレクション値なしでも機能します。 構文-unionall(<field> [、<field-n>] *) |
10 |
flatten(): フィールド内のコレクションを抽出し、結果として使用します。 非推奨です。代わりにexpand()を使用してください。 構文-flatten(<field>) |
11 |
last(): 複数値フィールド(配列、コレクション、マップ)の最後のアイテムのみを取得します。 複数値以外の型の場合、値を返すだけです。 構文-last(<field>) |
12 |
symmetricDifference(): 集約またはインラインとして機能します。 引数を1つだけ渡すと、パラメーターとして受け取ったコレクション間のSYMMETRIC DIFFERENCEが集計、実行、または返されます。 構文-symmetricDifference(<field> [、<field-n>] *) |
次のクエリを使用して、いくつかのコレクション関数を試してください。
次のクエリを実行して、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
---+----------+-------+---------------------------
その他の機能
____次の表は、その他の操作を実行する関数のリストを定義しています。
Sr.No. | Function Name & Description |
---|---|
1 |
date(): 文字列をフォーマットする日付を返します。 <date-as-string>は文字列形式の日付で、<format>はこれらの規則に従った日付形式です。 構文-日付(<date-as-string> [<format>] [、<timezone>]) |
2 |
sysdate(): 現在の日付と時刻を返します。 構文-sysdate([<format>] [、<timezone>]) |
3 |
format(): String.format()規則を使用して値をフォーマットします。 構文-format(<format> [、<arg1>](、<arg-n>] *。md) |
4 |
distance(): Haversineアルゴリズムを使用して、グローブ内の2点間の距離を返します。 座標は度でなければなりません。 構文-距離(<x-field>、<y-field>、<x-value>、<y-value>) |
5 |
ifnull(): 渡されたフィールド/値(またはオプションのパラメーターreturn_value_if_not_null)を返します。 フィールド/値がnullでない場合、return_value_if_nullを返します。 構文-ifnull(<field |
value>、<return_value_if_null> [、<return_value_if_not_null>](、<field&.md#124; value>] *) | 6 |
coalesce(): nullではない最初のフィールド/値パラメーターを返します。 nullでないフィールド/値がない場合、nullを返します。 構文-結合(<フィールド |
値> [、<フィールド-n |
値-n>] *) | 7 |
uuid(): Leach-Salzバリアントを使用して、128ビット値としてUUIDを生成します。 構文-uuid() |
8 |
次のクエリを使用して、いくつかのその他の機能を試してください。
次のクエリを実行して、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
OrientDB-インデックス
- インデックス*は、データベース内のデータの場所を指すポインタです。 *インデックス作成*は、データベース内のすべてのレコードを検索することなく、データをすばやく見つけるために使用される概念です。 OrientDBは、4つのインデックスアルゴリズムとそれぞれの中でいくつかのタイプをサポートしています。
インデックスの4つのタイプは-
SBツリーインデックス
他の種類のインデックスから利用可能な機能の良い組み合わせを提供します。 これを一般的なユーティリティに使用することをお勧めします。 耐久性があり、トランザクションに対応し、範囲クエリをサポートしています。 これはデフォルトのインデックスタイプです。 このアルゴリズムをサポートするさまざまなタイプのプラグインは-
- 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 Spatial 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表現を提供します。
例
次のクエリを試して、ユーザー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)
インデックスのクエリ
選択クエリを使用して、インデックス内のレコードを取得できます。
「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プロパティをサポートします。 *トランザクション*は、データベース管理システム内で実行される作業単位で構成されます。 データベース環境でトランザクションを維持する主な理由は2つあります。
- 障害からの同時回復を可能にし、システム障害が発生した場合でもデータベースの一貫性を維持します。
- データベースに同時にアクセスするプログラム間の分離を提供します。
デフォルトでは、データベーストランザクションは、Atomic、Consistent、Isolated、DurableプロパティなどのACIDプロパティに従う必要があります。 しかし、OrientDBはACIDに準拠したデータベースです。つまり、ACIDの概念に矛盾したり否定したりすることはありませんが、NoSQLデータベースを処理する際に認識を変更します。 ACIDプロパティがNoSQLデータベースとともにどのように機能するかを見てください。
アトミック-データベースを変更するために何かをするとき、変更は全体として機能するか失敗します。
一貫性-データベースは一貫性を保つ必要があります。
分離-他のトランザクション実行が同時に実行されている場合、ユーザーは同時実行でレコードを表示できません。
耐久性-システムがクラッシュした場合(ハードウェアまたはソフトウェア)、データベース自体がバックアップを取ることができるはずです。
データベーストランザクションは、CommitおよびRollbackコマンドを使用して実現できます。
コミット
コミットとは、データベースへのすべての変更を保存してトランザクションを閉じることを意味します。 ロールバックとは、トランザクションを開いた時点までデータベースの状態を回復することです。
次の文は、COMMITデータベースコマンドの基本的な構文です。
COMMIT
注-特定のデータベースに接続し、トランザクションを開始した後にのみ、このコマンドを使用できます。
例
この例では、このチュートリアルの前の章で作成した「デモ」という名前の同じデータベースを使用します。 トランザクションをコミットする操作を確認し、トランザクションを使用してレコードを保存します。
次の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
ロールバック
ロールバックとは、トランザクションを開いた時点までデータベースの状態を回復することです。
次の文は、ROLLBACKデータベースコマンドの基本的な構文です。
ROLLBACK
注-特定のデータベースに接続し、トランザクションを開始した後にのみ、このコマンドを使用できます。
例
この例では、チュートリアルの前の章で作成した「デモ」という名前の同じデータベースを使用します。 ロールバックトランザクションの操作を確認し、トランザクションを使用してレコードを保存します。
次の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
選択クエリをもう一度チェックして、Employeeテーブルから同じレコードを取得します。
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
ロールバックが正常に実行されると、出力に0レコードが見つかります。
0 item(s) found. Query executed in 0.037 sec(s).
Orientdb-hooks Orientdb-caching Orientdb-logging
OrientDB-パフォーマンスチューニング
この章では、OrientDBを使用するアプリケーションを最適化する方法に関する一般的なヒントを得ることができます。 さまざまなタイプのデータベースのパフォーマンスを向上させる方法は3つあります。
- ドキュメントデータベースパフォーマンスチューニング-新しいドキュメントごとにドキュメントが作成されるのを回避する手法を使用します。
- オブジェクトデータベースのパフォーマンスチューニング-パフォーマンスを改善するために一般的な手法を使用します。
- 分散構成の調整-分散構成のパフォーマンスを改善するためにさまざまな方法論を使用します。
メモリ、JVM、およびリモート接続設定を変更することにより、一般的なパフォーマンスチューニングを実現できます。
メモリ設定
メモリ設定には、パフォーマンスを改善するためのさまざまな戦略があります。
サーバーと埋め込み設定
これらの設定は、 plocal を直接使用することにより、埋め込みモードでOrientDBを使用してJavaアプリケーションが実行されるサーバーコンポーネントとJVMの両方で有効です。
チューニングで最も重要なことは、メモリ設定が正しいことを確認することです。 実際の違いを生むことができるのは、ヒープとメモリマッピングで使用される仮想メモリとの間の適切なバランスです。特に、メモリ内キャッシュ構造が生のIOより少ないとカウントされる大規模なデータセット(GB、TBなど)です。
たとえば、Javaプロセスに最大8GBを割り当てることができる場合、通常は小さなヒープと大きなディスクキャッシュバッファー(オフヒープメモリ)を割り当てる方が適切です。
ヒープメモリを増やすには、次のコマンドを試してください。
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
*storage.diskCache.bufferSize* 設定(古い「ローカル」ストレージでは *file.mmap.maxMemory* でした)はMB単位で、ディスクキャッシュコンポーネントに使用するメモリ量を示します。 デフォルトでは4GBです。
注-最大ヒープとディスクキャッシュバッファの合計が大きすぎる場合、OSが大幅にスローダウンしてスワップする可能性があります。
JVM設定
JVM設定は、server.sh(およびserver.bat)バッチファイルにエンコードされます。 これらを変更して、使用状況とhw/sw設定に従ってJVMを調整できます。 server.batファイルに次の行を追加します。
-server -XX:+PerfDisableSharedMem
この設定は、JVMに関するデバッグ情報の書き込みを無効にします。 JVMのプロファイルを作成する必要がある場合は、この設定を削除してください。
リモート接続
リモート接続を使用してデータベースにアクセスするときのパフォーマンスを改善する方法は多数あります。
フェッチ戦略
リモートデータベースを使用する場合、使用するフェッチ戦略に注意する必要があります。 デフォルトでは、OrientDBクライアントは結果セットに含まれるレコードのみをロードします。 たとえば、クエリが100個の要素を返すが、これらの要素をクライアントから渡した場合、OrientDBクライアントは、失われたレコードごとにサーバーへのもう1つのネットワーク呼び出しで要素を遅延ロードします。
ネットワーク接続プール
デフォルトでは、各クライアントはサーバーと通信するために1つのネットワーク接続のみを使用します。 同じクライアント上の複数のスレッドが同じネットワーク接続プールを共有します。
複数のスレッドがある場合、空きネットワーク接続の待機に多くの時間が費やされるため、ボトルネックが発生する可能性があります。 これが、ネットワーク接続プールを構成することが重要である理由です。
構成は非常にシンプルで、2つのパラメーターだけです-
- 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を使用すると、それらの外部で作業できます。 一般的なケースは読み取り専用クエリであるか、障害が発生した場合に大規模で非並行の操作を復元できます。 分散構成で実行する場合、トランザクションを使用すると、待ち時間を短縮できます。 これは、分散操作がコミット時にのみ発生するためです。 1つの大きな操作の分散は、待ち時間があるため、小さな複数の操作を転送するよりもはるかに効率的です。
レプリケーションとシャーディング
OrientDBの分散構成は完全レプリケーションに設定されています。 データベースの同じコピーを持つ複数のノードを持つことは、スケール読み取りにとって重要です。 実際、各サーバーは読み取りとクエリの実行に依存しません。 サーバーノードが10個ある場合、読み取りスループットは10倍になります。
書き込みでは、逆になります。複数のノードで完全なレプリケーションを行うと、レプリケーションが同期的な場合、操作が遅くなります。 この場合、書き込みに関与するのはノードのサブセットのみであるため、データベースを複数のノードに分割すると、書き込みをスケールアップできます。 さらに、1つのサーバーノードHDよりも大きいデータベースを使用できます。
書き込みでスケールアップ
ネットワークが低速で、同期(デフォルト)レプリケーションがある場合、遅延のコストを支払うことができます。 実際、OrientDBが同期的に実行される場合、少なくとも writeQuorum を待機します。 つまり、writeQuorumが3で、5つのノードがある場合、コーディネーターサーバーノード(分散操作が開始される)は、クライアントに回答を提供するために、少なくとも3つのノードからの回答を待つ必要があります。
一貫性を維持するには、writeQuorumを過半数に設定する必要があります。 5つのノードがある場合、大半は3です。 4つのノードでは、まだ3です。 writeQuorumを4または5ではなく3に設定すると、待ち時間のコストを削減し、一貫性を維持できます。
非同期複製
速度を上げるために、非同期レプリケーションをセットアップして、遅延のボトルネックを解消できます。 この場合、コーディネーターサーバーノードはローカルで操作を実行し、クライアントに回答を提供します。 複製全体がバックグラウンドになります。 クォーラムに達していない場合、変更は透過的にロールバックされます。
読み取りでスケールアップ
すでにwriteQuorumを過半数のノードに設定している場合は、 readQuorum を1(デフォルト)のままにしておくことができます。 これにより、すべての読み取りが高速化されます。
OrientDB-アップグレード
アップグレード中に、バージョン番号と形式を考慮する必要があります。 フォーマットには、メジャー、マイナー、パッチの3つのタイプがあります。
- MAJOR バージョンには、互換性のないAPIの変更が伴います。
- *マイナー*バージョンは、後方互換性のある機能を必要とします。
- PTCH バージョンには、後方互換性のあるバグ修正が必要です。
マイナーバージョンとメジャーバージョンを同期するには、データベースのエクスポートとインポートが必要になる場合があります。 多くの場合、多くの場合、データベースをLOCALからPLOCALに移行し、グラフをRidBagに移行する必要があります。
LOCAL Storage EngineからPLOCALへの移行
バージョン1.5.xから、OrientDBには新しいストレージエンジンPLOCAL(Paginated LOCAL)が付属しています。 LOCALのように永続的ですが、情報を別の方法で保存します。 次のポイントは、PLOCALとLOCALの比較を示しています-
- PLOCALでは、レコードはクラスターファイルに保存されますが、LOCALではクラスターとデータセグメントに分割されます。
- 追加書き込みモードのため、PLOCALはLOCALより耐久性があります。
- PLOCALには、書き込みに対する軽度の競合ロックがあります。これは、より多くの並行性を意味します。
- PLOCALはメモリマッピング手法(MMap)を使用しないため、動作はより「予測可能」です。
LOCALストレージを新しいPLOCALに移行するには、PLOCALをストレージエンジンとして使用してデータベースをエクスポートおよび再インポートする必要があります。 手順は次のとおりです。
- ステップ1 *-新しいシェル(Linux/Mac)またはコマンドプロンプト(Windows)を開きます。
ステップ2 *-コンソールを使用してデータベースをエクスポートします。 指定されたコマンドに従って、データベースデモを *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ツリーで管理される古いデータベースは完全に互換性がありますが、データベースを最新の形式に更新できます。
グラフは、コンソールまたは ORidBagMigration クラスを使用してアップグレードできます。
*データベースに接続CONNECT* plocal:databases/<graphdb-name> *
* グラフのアップグレードコマンドの実行
OrientDB-セキュリティ
RDBMSと同様に、OrientDBは、よく知られた概念、ユーザー、および役割に基づいたセキュリティも提供します。 各データベースには独自のユーザーがあり、各ユーザーには1つ以上のロールがあります。 ロールは、作業モードと一連の権限の組み合わせです。
ユーザー
デフォルトでは、OrientDBはサーバー内のすべてのデータベースに対して3人の異なるユーザーを維持します-
- Admin -このユーザーは、データベースのすべての機能に制限なくアクセスできます。
- リーダー-このユーザーは読み取り専用ユーザーです。 リーダーはデータベース内のレコードを照会できますが、それらを変更または削除することはできません。 ユーザーやロール自体などの内部情報にはアクセスできません。
- Writer -このユーザーはユーザーリーダーと同じですが、レコードを作成、更新、削除することもできます。
ユーザーとの連携
データベースに接続している場合、 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).
新しいユーザーを作成する
新しいユーザーを作成するには、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'
役割
ロールは、ユーザーがリソースに対して実行できる操作を決定します。 主に、この決定は作業モードとルールに依存します。 ルール自体の動作は、動作モードに応じて異なります。
ロールの使用
データベースに接続している場合、 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).
新しい役割の作成
新しいロールを作成するには、INSERTステートメントを使用します。
orientdb> INSERT INTO ORole SET name = 'developer', mode = 0
モードの使用
特定のロールに属するユーザーがデータベースで実行できることをルールが決定する場合、作業モードはOrientDBがこれらのルールを解釈する方法を決定します。 1と0で指定された2種類の作業モードがあります。
- (ルール以外のすべてを許可)-デフォルトでは、スーパーユーザーモードです。 ルールを使用して、これに対する例外を指定します。 OrientDBが要求されたリソースのルールを見つけられない場合、ユーザーは操作を実行できます。 このモードは、主にパワーユーザーと管理者に使用してください。 デフォルトのロール管理者はデフォルトでこのモードを使用し、例外ルールはありません。 データベースには1として書き込まれます。
- * Deny All But But(Rules)*-デフォルトでは、このモードでは何も許可されません。 ルールを使用して、これに対する例外を指定します。 OrientDBが要求されたリソースのルールを見つけると、ユーザーは操作を実行できます。 このモードをすべてのクラシックユーザーのデフォルトとして使用します。 デフォルトの役割であるリーダーとライターは、このモードを使用します。 データベースには0として書き込まれます。
OrientDB-スタジオ
OrientDBは、GUIを介してデータベース操作を実行するWeb UIを提供します。 この章では、OrientDBで利用可能なさまざまなオプションについて説明します。
スタジオのホームページ
Studioは、OrientDBディストリビューションにバンドルされているOrientDBの管理用のWebインターフェイスです。
まず、次のコマンドを使用してOrientDBサーバーを起動する必要があります。
$ server.sh
あなたのマシンでOrientDBを実行している場合、WebインターフェイスはURLを介してアクセスすることができます-
http://localhost:2480
コマンドが正常に実行されると、次の画面が出力されます。
既存のデータベースに接続する
ログインするには、データベースリストからデータベースを選択し、任意のデータベースユーザーを使用します。 デフォルトでは(ユーザー名/パスワード) reader/reader はデータベースからレコードを読み取り、 writer/writer はレコードを読み取り、作成、更新、削除できますが、 admin/admin はすべての権限を持ちます。
既存のデータベースを削除する
データベースリストからデータベースを選択し、ごみ箱アイコンをクリックします。 Studioは、サーバーユーザーとサーバーパスワードを挿入する必要がある確認ポップアップを開きます。
次に、「データベースを削除」ボタンをクリックします。 サーバーの資格情報は $ ORIENTDB_HOME/config/orientdb-server-config.xml ファイルにあります。
<users>
<user name = "root" password = "pwd" resources = "*"/>
</users>
新しいデータベースを作成する
新しいデータベースを作成するには、ホームページから「新しいDB」ボタンをクリックします。
新しいデータベースを作成するには、次の情報が必要です-
- データベース名
- データベースの種類(ドキュメント/グラフ)
- ストレージタイプ(plocal/メモリ)
- サーバーユーザー
- サーバーパスワード
サーバーの資格情報は $ ORIENTDB_HOME/config/orientdbserver-config.xml ファイルにあります。
<users>
<user name = "root" password = "pwd" resources = "*"/>
</users>
作成されると、Studioは自動的に新しいデータベースにログインします。
クエリを実行する
Studioは、サポートされている言語(SQLとGremlin)の間で使用している言語の自動認識をサポートしています。 書き込み中に、 Ctrl + Space を押してオートコンプリート機能を使用します。
次のショートカットは、クエリエディターで利用可能です-
- Ctrl + Return -クエリを実行するか、[実行]ボタンをクリックするだけです。
- Ctrl/Cmd + Z -変更を取り消す。
- Ctrl/Cmd + Shift + Z -変更をやり直す。
- Ctrl/Cmd + F -エディターで検索します。
- Ctrl/Cmd +/ -コメントを切り替えます。
次のスクリーンショットは、クエリを実行する方法を示しています。
結果セットの任意の @ rid 値をクリックすると、レコードがドキュメントの場合はドキュメント編集モードになり、そうでない場合は頂点編集になります。
結果セットまたはエディターでスターアイコンをクリックして、クエリをブックマークできます。 ブックマークされたクエリを参照するには、*ブックマーク*ボタンをクリックします。 Studioは左側のブックマークリストを開きます。ここでクエリを編集/削除または再実行できます。
Studioは、実行されたクエリをブラウザのローカルストレージに保存します。 クエリ設定では、スタジオが履歴に保持するクエリの数を設定できます。 以前に実行したクエリを検索したり、履歴からすべてのクエリを削除したり、単一のクエリを削除したりすることもできます。
頂点を編集
グラフの頂点を編集するには、グラフセクションに移動します。 次に、次のクエリを実行します。
Select From Customer
クエリを正常に実行すると、出力スクリーンショットが表示されます。 編集するグラフキャンバスで特定の頂点を選択します。
特定の頂点で編集記号を選択します。 頂点を編集するオプションを含む次の画面が表示されます。
スキーママネージャー
OrientDBは、スキーマレスモード、スキーマモード、または両方の組み合わせで動作します。 ここでは、スキーマモードについて説明します。 Web UIの上部にある[スキーマ]セクションをクリックします。 次のスクリーンショットが表示されます。
新しいクラスを作成する
新しいクラスを作成するには、[新しいクラス]ボタンをクリックするだけです。 次のスクリーンショットが表示されます。 新しいクラスを作成するには、スクリーンショットに示されている次の情報を提供する必要があります。
すべてのインデックスを表示
データベースで作成されたすべてのインデックスの概要が必要な場合は、スキーマUIの[すべてのインデックス]ボタンをクリックするだけです。 これにより、インデックスに関するいくつかの情報(名前、タイプ、プロパティなど)にすばやくアクセスでき、ここから削除または再構築できます。
クラスを編集
スキーマセクションのクラスをクリックすると、次のスクリーンショットが表示されます。
クラスの編集中に、プロパティを追加したり、新しいインデックスを追加したりできます。
プロパティを追加する
プロパティを追加するには、[新しいプロパティ]ボタンをクリックします。 次のスクリーンショットが表示されます。
プロパティを追加するには、スクリーンショットに示すように、次の詳細を提供する必要があります。
インデックスを追加する
[新しいインデックス]ボタンをクリックします。 次のスクリーンショットが表示されます。 インデックスを追加するには、スクリーンショットに示すように、次の詳細を提供する必要があります。
グラフエディター
グラフセクションをクリックします。 データをグラフスタイルで視覚化できるだけでなく、グラフを操作して変更することもできます。
グラフ領域にデータを入力するには、クエリエディタにクエリを入力するか、参照UIからグラフに送信機能を使用します。
頂点を追加
グラフデータベースとグラフキャンバス領域に新しい頂点を追加するには、*頂点の追加*ボタンを押す必要があります。 この操作は2つのステップで実行されます。
最初のステップでは、新しい頂点のクラスを選択して、[次へ]をクリックする必要があります。
2番目のステップでは、新しい頂点のフィールド値を挿入する必要があります。 OrientDBはスキーマレスモードをサポートしているため、カスタムフィールドを追加することもできます。 新しい頂点を永続的にするには、[変更を保存]をクリックすると、頂点がデータベースに保存され、キャンバス領域に追加されます。
頂点を削除
削除する頂点をクリックして、円形メニューを開きます。 マウスをメニューエントリ[詳細](…)に合わせてサブメニューを開き、ゴミ箱アイコンをクリックします。
キャンバスから頂点を削除
円形のメニューを開き、メニューエントリにマウスカーソルを合わせてサブメニューを開き(…)、消しゴムアイコンをクリックします。
頂点の検査
頂点プロパティをすばやく確認したい場合は、目のアイコンをクリックします。
セキュリティ
Studio 2.0には、新しいセキュリティ管理が含まれており、ユーザーとロールをグラフィカルに管理できます。
ユーザー
次のアクションを実行して、データベースユーザーを管理できます-
- ユーザーを検索
- ユーザーを追加
- ユーザーを削除する
- ユーザーの編集:名前、ステータス、パスワードのロールをインラインで編集できます。[編集]ボタンをクリックします
ユーザーを追加
新しいユーザーを追加するには、[ユーザーの追加]ボタンをクリックして、新しいユーザーの情報(名前、パスワード、ステータス、ロール)を入力し、保存して新しいユーザーをデータベースに追加します。
役割
次のアクションを実行して、データベースロールを管理できます-
- 検索ロール
- 役割を追加
- 役割を削除
- 役割を編集
役割を追加
新しいユーザーを追加するには、[ロールの追加]ボタンをクリックして、新しいロールの情報(名前、親ロール、モード)を入力し、保存してデータベースに新しいロールを追加します。
ルールをロールに追加する
選択したロールに新しいセキュリティルールを追加するには、[*ルールの追加]ボタンをクリックします。 これにより、保護するリソースの文字列を尋ねられます。 次に、新しく作成されたリソースでCRUD権限を構成できます。
OrientDB-Pythonインターフェース
Python用のOrientDBドライバーは、バイナリプロトコルを使用します。 PyOrientは、OrientDBをPythonに接続するのに役立つgitハブプロジェクト名です。 OrientDBバージョン1.7以降で動作します。
次のコマンドは、PyOrientをインストールするために使用されます。
pip install pyorient
*demo.py* という名前のスクリプトファイルを使用して、次のタスクを実行できます-
- クライアントインスタンスを作成すると、接続が作成されます。
- DB_Demo という名前のDBを作成します。
- DB_Demoという名前のDBを開きます。
- クラスmy_classを作成します。
- プロパティidと名前を作成します。
- クラスにレコードを挿入します。
//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