OrientDB-クイックガイド
OrientDBは、オープンソースのNoSQLデータベース管理システムです。 NoSQL Databaseドキュメントデータやグラフデータなどの表形式データ以外のデータを参照するNO-relationまたはNON-relationalデータを格納および取得するためのメカニズムを提供します。NoSQLデータベースは、ビッグデータやリアルタイムWebアプリケーションでますます使用されています。NoSQLシステムは、SQLに似たクエリ言語をサポートする可能性があることを強調するために、「SQLだけではない」と呼ばれることもあります。
OrientDBはNoSQLファミリーにも属しています。OrientDBは、Apache2ライセンスのオープンソースを備えた1つの製品のドキュメントの柔軟性を備えた第2世代の分散グラフデータベースです。OrientDBの前に市場にはいくつかのNoSQLデータベースがあり、そのうちの1つがMongoDBでした。
MongoDBとOrientDB
MongoDBとOrientDBには多くの共通機能が含まれていますが、エンジンは根本的に異なります。MongoDBは純粋なドキュメントデータベースであり、OrientDBはグラフエンジンを備えたハイブリッドドキュメントです。
特徴 | MongoDB | OrientDB |
---|---|---|
Relationships | RDBMS JOINSを使用して、エンティティ間の関係を作成します。実行時のコストが高く、データベースの規模が大きくなっても拡張できません。 | リレーショナルデータベースのようなドキュメントを埋め込み、接続します。グラフデータベースの世界から取得した直接の超高速リンクを使用します。 |
Fetch Plan | コストのかかるJOIN操作。 | 相互接続されたドキュメントを含む完全グラフを簡単に返します。 |
Transactions | ACIDトランザクションはサポートしていませんが、アトミック操作はサポートしています。 | ACIDトランザクションとアトミック操作をサポートします。 |
Query language | JSONに基づく独自の言語があります。 | クエリ言語はSQLに基づいて構築されています。 |
Indexes | すべてのインデックスにBツリーアルゴリズムを使用します。 | ユーザーが最高のパフォーマンスを達成できるように、3つの異なるインデックス作成アルゴリズムをサポートします。 |
Storage engine | メモリマッピング技術を使用します。 | ストレージエンジン名LOCALおよびPLOCALを使用します。 |
OrientDBは、グラフの能力とドキュメントの柔軟性をスケーラブルで高性能な運用データベースに統合した最初のマルチモデルオープンソースNoSQLDBMSです。
OrientDBインストールファイルは2つのエディションで利用可能です-
Community Edition − OrientDBコミュニティエディションは、オープンソースとして0.2ライセンスの下でApacheによってリリースされています
Enterprise Edition− OrientDB Enterprise Editionは、CommunityEditionに基づいて構築されたプロプライエタリソフトウェアとしてリリースされます。コミュニティエディションの拡張機能として機能します。
この章では、オープンソースであるOrientDB CommunityEditionのインストール手順について説明します。
前提条件
コミュニティエディションとエンタープライズエディションはどちらも、Java仮想マシン(JVM)を実装する任意のオペレーティングシステムで実行できます。OrientDBには、1.7以降のバージョンのJavaが必要です。
次の手順を使用して、OrientDBをダウンロードしてシステムにインストールします。
ステップ1-OrientDBバイナリセットアップファイルをダウンロードする
OrientDBには、データベースをシステムにインストールするためのセットアップファイルが組み込まれています。さまざまなオペレーティングシステム用に、さまざまなプリコンパイル済みバイナリパッケージ(tarまたはzipパッケージ)を提供します。OrientDBファイルは、OrientDBのダウンロードリンクからダウンロードできます。
次のスクリーンショットは、OrientDBのダウンロードページを示しています。適切なオペレーティングシステムアイコンをクリックすると、zipファイルまたはtarファイルをダウンロードできます。
ダウンロードすると、バイナリパッケージが Downloads フォルダ。
ステップ2-OrientDBを抽出してインストールする
以下は、さまざまなオペレーティングシステム用にOrientDBを抽出してインストールする手順です。
Linuxの場合
ダウンロード後、あなたは得るでしょう orientdb-community-2.1.9.tar.gz あなたのファイル Downloadsフォルダ。次のコマンドを使用して、tarファイルを抽出できます。
$ tar –zxvf orientdb-community-2.1.9.tar.gz
次のコマンドを使用して、すべてのOrientDBライブラリファイルをから移動できます。 orientdbcommunity-2.1.9 to /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 あなたのファイル Downloadsフォルダ。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にあります。
スクリプトファイルを実行する前に、編集する必要があります orientdb.sh2つの変数を定義するためのファイル。1つはORIENTDB_DIR インストールディレクトリへのパスを定義します(/opt/orientdb)そして2番目は 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
次のコマンドを使用して、次のOrientDBインストールディレクトリからconsole.shファイルをコピーします。 $ORIENTDB_HOME/bin であるシステムbinディレクトリに /usr/bin OrientDBのコンソールにアクセスするため。
$ 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ファイル。ただし、上記のスクリプトを実行せずにシステムが突然シャットダウンすると、サーバーインスタンスは正しく停止しません。指定された信号のセットでオペレーティングシステムによって制御されるプログラムは呼び出されますservices Windowsで。
私たちは使用する必要があります Apache Common Daemonこれにより、WindowsユーザーはJavaアプリケーションをWindowsサービスとしてラップできます。以下は、Apache共通デーモンをダウンロードして登録する手順です。
Windows用のApacheCommon Daemonsについては、次のリンクをクリックしてください。
クリック common-daemon-1.0.15-bin-windows ダウンロードする。
解凍します common-daemon-1.0.15-bin-windowsディレクトリ。抽出した後、あなたは見つけるでしょうprunsrv.exe そして prunmgr.exeディレクトリ内のファイル。それらの中で-
prunsrv.exe fileは、アプリケーションをサービスとして実行するためのサービスアプリケーションです。
prunmgr.exe fileは、Windowsサービスの監視と構成に使用されるアプリケーションです。
OrientDBインストールフォルダに移動→新しいディレクトリを作成し、サービスという名前を付けます。
をコピーします 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)
C:\ orientdb-community-2.1.9などのOrientDBインストールの場所
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
タスクマネージャーサービスを開くと、登録されたサービス名が含まれている次のスクリーンショットが表示されます。
ステップ4-OrientDBのインストールを確認する
この手順では、次の手順を使用してOrientDBデータベースサーバーのインストールを確認します。
- サーバーを実行します。
- コンソールを実行します。
- スタジオを実行します。
これは、オペレーティングシステムによって異なります。
Linuxの場合
LinuxでのOrientDBのインストールを確認するには、所定の手順に従います。
Running the server −次のコマンドを使用してサーバーを起動できます。
$ cd $ORIENTDB_HOME/bin $ ./server.sh
または、次のコマンドを使用して、OrientDBサーバーをUNIXデーモンとして起動できます。
$ service orientdb start
正常にインストールされると、次の出力が表示されます。
.
.` `
, `:.
`,` ,:`
.,. :,,
.,, ,,,
. .,.::::: ```` ::::::::: :::::::::
,` .::,,,,::.,,,,,,`;; .: :::::::::: ::: :::
`,. ::,,,,,,,:.,,.` ` .: ::: ::: ::: :::
,,:,:,,,,,,,,::. ` ` `` .: ::: ::: ::: :::
,,:.,,,,,,,,,: `::, ,, ::,::` : :,::` :::: ::: ::: ::: :::
,:,,,,,,,,,,::,: ,, :. : :: : .: ::: ::: :::::::
:,,,,,,,,,,:,:: ,, : : : : .: ::: ::: :::::::::
` :,,,,,,,,,,:,::, ,, .:::::::: : : .: ::: ::: ::: :::
`,...,,:,,,,,,,,,: .:,. ,, ,, : : .: ::: ::: ::: :::
.,,,,::,,,,,,,: `: , ,, : ` : : .: ::: ::: ::: :::
...,::,,,,::.. `: .,, :, : : : .: ::::::::::: ::: :::
,::::,,,. `: ,, ::::: : : .: ::::::::: ::::::::::
,,:` `,,.
,,, .,`
,,. `, GRAPH DATABASE
`` `.
`` orientdb.com
`
2016-01-20 19:17:21:547 INFO OrientDB auto-config DISKCACHE = 1,
649MB (heap = 494MB os = 4, 192MB disk = 199, 595MB) [orientechnologies]
2016-01-20 19:17:21:816 INFO Loading configuration from:
/opt/orientdb/config/orientdb-server-config.xml... [OServerConfigurationLoaderXml]
2016-01-20 19:17:22:213 INFO OrientDB Server v2.1.9-SNAPSHOT
(build 2.1.x@r; 2016-01-07 10:51:24+0000) is starting up... [OServer]
2016-01-20 19:17:22:220 INFO Databases directory: /opt/orientdb/databases [OServer]
2016-01-20 19:17:22:361 INFO Port 0.0.0.0:2424 busy,
trying the next available... [OServerNetworkListener]
2016-01-20 19:17:22:362 INFO Listening binary connections on 0.0.0.0:2425
(protocol v.32, socket = default) [OServerNetworkListener]
...
2016-01-20 19:17:22:614 INFO Installing Script interpreter. WARN:
authenticated clients can execute any kind of code into the server
by using the following allowed languages:
[sql] [OServerSideScriptInterpreter]
2016-01-20 19:17:22:615 INFO OrientDB Server v2.1.9-SNAPSHOT
(build 2.1.x@r; 2016-01-07 10:51:24+0000) is active. [OServer]
Running the console −次のコマンドを使用して、コンソールでOrientDBを実行できます。
$ orientdb
正常にインストールされると、次の出力が表示されます。
OrientDB console v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0
orientdb>
Running the Studio −サーバーの起動後、次のURLを使用できます(http://localhost:2480/)ブラウザで。次のスクリーンショットが表示されます。
Windowsの場合
WindowsでOrientDBがインストールされていることを確認するには、所定の手順に従います。
Running the server −次のコマンドを使用してサーバーを起動できます。
> cd %ORIENTDB_HOME%\bin
> ./server.bat
正常にインストールされると、次の出力が表示されます。
.
.` `
, `:.
`,` ,:`
.,. :,,
.,, ,,,
. .,.::::: ```` ::::::::: :::::::::
,` .::,,,,::.,,,,,,`;; .: :::::::::: ::: :::
`,. ::,,,,,,,:.,,.` ` .: ::: ::: ::: :::
,,:,:,,,,,,,,::. ` ` `` .: ::: ::: ::: :::
,,:.,,,,,,,,,: `::, ,, ::,::` : :,::` :::: ::: ::: ::: :::
,:,,,,,,,,,,::,: ,, :. : :: : .: ::: ::: :::::::
:,,,,,,,,,,:,:: ,, : : : : .: ::: ::: :::::::::
` :,,,,,,,,,,:,::, ,, .:::::::: : : .: ::: ::: ::: :::
`,...,,:,,,,,,,,,: .:,. ,, ,, : : .: ::: ::: ::: :::
.,,,,::,,,,,,,: `: , ,, : ` : : .: ::: ::: ::: :::
...,::,,,,::.. `: .,, :, : : : .: ::::::::::: ::: :::
,::::,,,. `: ,, ::::: : : .: ::::::::: ::::::::::
,,:` `,,.
,,, .,`
,,. `, GRAPH DATABASE
`` `.
`` orientdb.com
`
2016-01-20 19:17:21:547 INFO OrientDB auto-config DISKCACHE = 1,649MB
(heap = 494MB os = 4, 192MB disk = 199, 595MB) [orientechnologies]
2016-01-20 19:17:21:816 INFO Loading configuration from:
/opt/orientdb/config/orientdb-server-config.xml...
[OServerConfigurationLoaderXml]
...
2016-01-20 19:17:22:615 INFO OrientDB Server v2.1.9-SNAPSHOT
(build 2.1.x@r; 2016-01-07 10:51:24+0000) is active. [OServer]
Running the console −次のコマンドを使用して、コンソールでOrientDBを実行できます。
> %ORIENTDB_HOME%\bin\console.bat
正常にインストールされると、次の出力が表示されます。
OrientDB console v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0
orientdb\>
Running the Studio −サーバーの起動後、次のURLを使用できます(http://localhost:2480/)ブラウザで。次のスクリーンショットが表示されます。
OrientDBの主な機能は、マルチモデルオブジェクトをサポートすることです。つまり、ドキュメント、グラフ、キー/値、実オブジェクトなどのさまざまなモデルをサポートします。これら4つのモデルすべてをサポートするための個別のAPIが含まれています。
ドキュメントモデル
ドキュメントモデルという用語は、NoSQLデータベースに属しています。これは、データがドキュメントに保存され、ドキュメントのグループが次のように呼ばれることを意味しますCollection。技術的には、ドキュメントとは、キーと値のペアのセットを意味するか、フィールドまたはプロパティとも呼ばれます。
OrientDBは、クラス、クラスター、リンクなどの概念を使用して、ドキュメントを保存、グループ化、および分析します。
次の表は、リレーショナルモデル、ドキュメントモデル、およびOrientDBドキュメントモデルの比較を示しています。
リレーショナルモデル | ドキュメントモデル | OrientDBドキュメントモデル |
---|---|---|
テーブル | コレクション | クラスまたはクラスター |
行 | 資料 | 資料 |
カラム | キー/値のペア | ドキュメントフィールド |
関係 | 利用不可 | リンク |
グラフモデル
グラフデータ構造は、エッジ(アーク)によって相互接続された頂点(ノード)の形式でデータを格納できるデータモデルです。OrientDBグラフデータベースのアイデアは、プロパティグラフから生まれました。頂点とエッジは、グラフモデルの主なアーティファクトです。これらにはプロパティが含まれているため、これらをドキュメントのように見せることができます。
次の表は、グラフモデル、リレーショナルデータモデル、およびOrientDBグラフモデルの比較を示しています。
リレーショナルモデル | グラフモデル | OrientDBグラフモデル |
---|---|---|
テーブル | 頂点とエッジクラス | 「V」(頂点の場合)および「E」(エッジの場合)を拡張するクラス |
行 | バーテックス | バーテックス |
カラム | 頂点とエッジのプロパティ | 頂点とエッジのプロパティ |
関係 | 縁 | 縁 |
キー/値モデル
キー/値モデルは、値が単純型と複雑型のキー/値ペアの形式でデータを格納できることを意味します。ドキュメントとグラフ要素を値としてサポートできます。
次の表は、リレーショナルモデル、キー/値モデル、およびOrientDBキー/値モデルの比較を示しています。
リレーショナルモデル | キー/値モデル | OrientDBキー/値モデル |
---|---|---|
テーブル | バケツ | クラスまたはクラスター |
行 | キー/値のペア | 資料 |
カラム | 利用不可 | ドキュメントフィールドまたは頂点/エッジプロパティ |
関係 | 利用不可 | リンク |
オブジェクトモデル
このモデルはオブジェクト指向プログラミングによって継承され、サポートされています Inheritance タイプ間(サブタイプはスーパータイプを拡張します)、 Polymorphism 基本クラスを参照するとき Direct binding from / toプログラミング言語で使用されるオブジェクト。
次の表は、リレーショナルモデル、オブジェクトモデル、およびOrientDBオブジェクトモデルの比較を示しています。
リレーショナルモデル | オブジェクトモデル | OrientDBオブジェクトモデル |
---|---|---|
テーブル | クラス | クラスまたはクラスター |
行 | オブジェクト | ドキュメントまたは頂点 |
カラム | オブジェクトプロパティ | ドキュメントフィールドまたは頂点/エッジプロパティ |
関係 | ポインター | リンク |
詳細に進む前に、OrientDBに関連する基本的な用語を理解しておくことをお勧めします。以下は重要な用語のいくつかです。
記録
データベースからロードしてデータベースに保存できる最小単位。レコードは4種類で保存できます。
- Document
- レコードバイト
- Vertex
- Edge
レコードID
OrientDBがレコードを生成すると、データベースサーバーはRecordID(RID)と呼ばれるユニット識別子をレコードに自動的に割り当てます。RIDは#<cluster>:<position>のようになります。<cluster>はクラスター識別番号を意味し、<position>はクラスター内のレコードの絶対位置を意味します。
ドキュメント
ドキュメントは、OrientDBで利用できる最も柔軟なレコードタイプです。ドキュメントはソフトタイプであり、制約が定義されたスキーマクラスによって定義されますが、スキーマなしでドキュメントを挿入することもできます。つまり、スキーマレスモードもサポートします。
ドキュメントは、JSON形式でエクスポートおよびインポートすることで簡単に処理できます。たとえば、次のJSONサンプルドキュメントを見てください。ドキュメントの詳細を定義します。
{
"id" : "1201",
"name" : "Jay",
"job" : "Developer",
"creations" : [
{
"name" : "Amiga",
"company" : "Commodore Inc."
},
{
"name" : "Amiga 500",
"company" : "Commodore Inc."
}
]
}
RecordBytes
レコードタイプは、RDBMSのBLOBタイプと同じです。OrientDBは、バイナリデータとともにドキュメントレコードタイプをロードおよび保存できます。
バーテックス
OrientDBデータベースは、ドキュメントデータベースであるだけでなく、グラフデータベースでもあります。VertexやEdgeなどの新しい概念は、データをグラフの形式で保存するために使用されます。グラフデータベースでは、データの最も基本的な単位はノードであり、OrientDBでは頂点と呼ばれます。Vertexは、データベースの情報を格納します。
縁
ある頂点を別の頂点に接続するエッジと呼ばれる別のレコードタイプがあります。エッジは双方向であり、2つの頂点のみを接続できます。OrientDBには2種類のエッジがあり、1つは通常のもので、もう1つは軽量です。
クラス
このクラスは、データモデルの一種であり、オブジェクト指向プログラミングパラダイムから引き出された概念です。従来のドキュメントデータベースモデルに基づいて、データはコレクションの形式で保存されますが、リレーショナルデータベースモデルではデータはテーブルに保存されます。OrientDBは、OPPSパラダイムとともにDocumentAPIに従います。概念として、OrientDBのクラスは、リレーショナルデータベースのテーブルと最も近い関係にありますが、(テーブルとは異なり)クラスは、スキーマなし、スキーマフル、または混合にすることができます。クラスは他のクラスから継承して、クラスのツリーを作成できます。各クラスには独自のクラスターがあります(定義されていない場合は、デフォルトで作成されます)。
集まる
クラスターは、レコード、ドキュメント、または頂点を格納するために使用される重要な概念です。簡単に言うと、クラスターはレコードのグループが格納される場所です。デフォルトでは、OrientDBはクラスごとに1つのクラスターを作成します。クラスのすべてのレコードは、クラスと同じ名前の同じクラスターに格納されます。データベースには最大32,767(2 ^ 15-1)個のクラスターを作成できます。
CREATEクラスは、特定の名前でクラスターを作成するために使用されるコマンドです。クラスターが作成されると、クラスターを使用して、データモデルの作成中に名前を指定することにより、レコードを保存できます。
関係
OrientDBは、参照と埋め込みの2種類の関係をサポートしています。 Referenced relationships 関係のターゲットオブジェクトへの直接リンクを格納することを意味します。 Embedded relationshipsそれはそれを埋め込むレコード内に関係を保存することを意味します。この関係は、参照関係よりも強力です。
データベース
データベースは、実ストレージにアクセスするためのインターフェースです。ITは、クエリ、スキーマ、メタデータ、インデックスなどの高レベルの概念を理解しています。OrientDBは、複数のデータベースタイプも提供します。これらのタイプの詳細については、データベースタイプを参照してください。
OrientDBは、いくつかのデータ型をネイティブにサポートしています。以下は、同じものの完全な表です。
シニア番号 | タイプ | 説明 |
---|---|---|
1 | ブール値 | TrueまたはFalseの値のみを処理します。 Java types:java.lang.Boolean Min:0 Max:1 |
2 | 整数 | 32ビットの符号付き整数。 Java types:java.lang.Interger Min:-2,147,483,648 Max:+2,147,483,647 |
3 | ショート | 小さい16ビットの符号付き整数。 Java types:java.lang.short Min:-32,768 Max:32,767 |
4 | 長いです | 大きな64ビット符号付き整数。 Java types:java.lang.Long Min:-2 63 Max:+2 63 -1 |
5 | 浮く | 10進数。 Java types:java.lang.Float :2 -149 Max(2-2 -23)* 2、127 |
6 | ダブル | 高精度の10進数。 Java types:Java.lang.Double。 Min:2 -1074 Max:(2-2 -52)* 2 1023 |
7 | 日付時刻 | ミリ秒までの精度の任意の日付。 Java types:java.util.Date |
8 | ストリング | 文字の英数字シーケンスとしての任意の文字列。 Java types:java.lang.String |
9 | バイナリ | バイト配列として任意の値を含めることができます。 Java types:バイト[] Min:0 Max:2,147,483,647 |
10 | 埋め込み | レコードは所有者の中に含まれています。含まれているレコードにはRecordIdがありません。 Java types:ORecord |
11 | 埋め込みリスト | レコードは所有者の中に含まれています。含まれているレコードにはRecordIdがなく、所有者レコードをナビゲートすることによってのみ到達可能です。 Java types:リスト<オブジェクト> Min:0 Max:41,000,000アイテム |
12 | 埋め込みセット | レコードは所有者の中に含まれています。含まれているレコードにはRecordIdがなく、所有者レコードをナビゲートすることによってのみ到達可能です。 Java types:set <objects> Min:0 Max:41,000,000アイテム |
13 | 埋め込まれた地図 | レコードはエントリの値として所有者内に含まれますが、キーは文字列のみにすることができます。含まれているレコードにはRecordIdがなく、所有者のレコードをナビゲートすることによってのみ到達可能です。 Java types:Map <String、ORecord> Min:0 Max:41,000,000アイテム |
14 | リンク | 別のレコードへのリンク。それは一般的な1対1の関係です Java Types:ORID、<?ORecordを拡張> Min:1 Max:32767:2 ^ 63-1 |
15 | リンクリスト | 他のレコードへのリンク。これは、RecordIdのみが格納される一般的な1対多の関係です。 Java types:リスト<?ORecordを拡張します> Min:0 Max:41,000,000アイテム |
16 | リンクセット | 他のレコードへのリンク。これは一般的な1対多の関係です。 Java types:設定<?ORecordを拡張> Min:0 Max:41,000,000アイテム |
17 | リンクマップ | キーは文字列のみにすることができますが、エントリの値として他のレコードにリンクします。これは一般的な1対多の関係です。RecordIdのみが保存されます。 Java types:Map <String、?レコードを拡張> Min:0 Max:41,000,000アイテム |
18 | バイト | 1バイト。小さい8ビットの符号付き整数を格納するのに便利です。 Java types:java.lang.Byte Min:-128 Max:+127 |
19 | 一時的 | データベースに保存されていない値。 |
20 | 日付 | 年、月、日などの任意の日付。 Java Types:java.util.Date |
21 | カスタム | MarshallメソッドとUnmarshallメソッドを提供するカスタムタイプを格納するために使用されます。 Java types:OSerializableStream Min:0 Max: バツ |
22 | 10進数 | 丸めなしの10進数。 Java types:java.math.BigDecimal |
23 | LinkBag | 特定のRidBagとしてのRecordIdのリスト。 Java types:ORidBag |
24 | どれか | タイプを決定せず、混合タイプのコレクションを指定するために使用され、null。 |
次の章では、OrientDBでこれらのデータ型を使用する方法について説明します。
OrientDBコンソールは、OrientDBデータベースおよびサーバーインスタンスに対して機能するように作成されたJavaアプリケーションです。OrientDBがサポートするコンソールモードはいくつかあります。
インタラクティブモード
これがデフォルトのモードです。次のスクリプトを実行してコンソールを起動するだけですbin/console.sh (または bin/console.batMS Windowsシステムの場合)。必ず実行権限を持ってください。
OrientDB console v.1.6.6 www.orientechnologies.com
Type 'help' to display all the commands supported.
orientdb>
完了すると、コンソールはコマンドを受け入れる準備が整います。
バッチモード
バッチモードでコマンドを実行するには、以下を実行します bin/console.sh (または bin/console.bat MS Windowsシステムの場合)セミコロン「;」で区切られたすべてのコマンドを渡すスクリプト。
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データベースのSQLリファレンスには、データベースを作成、変更、および削除するためのいくつかのコマンドが記載されています。
次のステートメントは、CreateDatabaseコマンドの基本的な構文です。
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}>
データベースは、要件に応じて変更できるさまざまな属性を持つ重要なデータモデルの1つです。
次のステートメントは、AlterDatabaseコマンドの基本的な構文です。
ALTER DATABASE <attribute-name> <attribute-value>
どこ <attribute-name> 変更する属性を定義し、 <attributevalue> その属性に設定する値を定義します。
次の表は、データベースを変更するためにサポートされている属性のリストを定義しています。
シニア番号 | 属性名 | 説明 |
---|---|---|
1 | 状態 | 異なる属性間のデータベースのステータスを定義します。 |
2 | 輸入 | インポートステータスを設定します。 |
3 | DEFAULTCLUSTERID | IDを使用してデフォルトのクラスターを設定します。デフォルトでは2です。 |
4 | DATEFORMAT | 特定の日付形式をデフォルトとして設定します。デフォルトでは「yyyy-MM-dd」です。 |
5 | DATETIMEFORMAT | 特定の日時形式をデフォルトとして設定します。デフォルトでは「yyyy-MM-ddHH:mm:ss」です。 |
6 | タイムゾーン | 特定のタイムゾーンを設定します。デフォルトでは、Java仮想マシン(JVM)のデフォルトのタイムゾーンです。 |
7 | LOCALECOUNTRY | デフォルトのロケールの国を設定します。デフォルトでは、JVMのデフォルトのロケールの国です。例:「GB」。 |
8 | LOCALELANGUAGE | デフォルトのロケール言語を設定します。デフォルトでは、JVMのデフォルトのロケール言語です。例:「en」。 |
9 | 文字コード | 文字セットのタイプを設定します。デフォルトでは、JVMのデフォルトの文字セットです。例:「utf8」。 |
10 | CLUSTERSELECTION | クラスターの選択に使用されるデフォルトの戦略を設定します。これらの戦略は、クラスの作成とともに作成されます。サポートされている戦略は、デフォルト、ラウンドロビン、およびバランスです。 |
11 | 最小クラスター | 新しいクラスが作成されたときに自動的に作成するクラスターの最小数を設定します。デフォルトでは1です。 |
12 | カスタム | カスタムプロパティを設定します。 |
13 | 検証 | データベース全体の検証を無効または有効にします。 |
例
OrientDB-2.2のバージョンから、新しいSQLパーサーが追加され、場合によっては通常の構文が許可されなくなります。したがって、場合によっては、新しいSQLパーサー(StrictSQL)を無効にする必要があります。次のAlterdatabaseコマンドを使用して、StrictSQLパーサーを無効にできます。
orientdb> ALTER DATABASE custom strictSQL = false
コマンドが正常に実行されると、次の出力が得られます。
Database updated successfully
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
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コマンドラインから特定のデータベースに接続する方法について説明します。データベースを開きます。
次のステートメントは、Connectコマンドの基本的な構文です。
CONNECT <database-url> <user> <password>
上記の構文のオプションの詳細は次のとおりです。
<database-url>−データベースのURLを定義します。URLには2つの部分があり、1つは<mode>で、もう1つは<path>です。
<mode> −モード、つまりローカルモードまたはリモートモードを定義します。
<path> −データベースへのパスを定義します。
<user> −データベースに接続するユーザーを定義します。
<password> −データベースに接続するためのパスワードを定義します。
例
前の章で「demo」という名前のデータベースをすでに作成しました。この例では、ユーザー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コマンドラインから特定のデータベースに切断する方法について説明します。現在開いているデータベースを閉じます。
次のステートメントは、Disconnectコマンドの基本的な構文です。
DISCONNECT
Note −このコマンドは、特定のデータベースに接続した後でのみ使用でき、現在実行中のデータベースのみを閉じます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。デモデータベースから切断します。
次のコマンドを使用して、データベースを切断できます。
orientdb {db = demo}> DISCONNECT
正常に切断されると、次の出力が得られます-
Disconnecting to database [plocal:/opt/orientdb/databases/demo] with user 'admin'…OK
orientdb>
この章では、OrientDBコマンドラインから特定のデータベースの情報を取得する方法について説明します。
次のステートメントは、Infoコマンドの基本的な構文です。
info
Note −このコマンドは、特定のデータベースに接続した後でのみ使用でき、現在実行中のデータベースの情報のみを取得します。
例
この例では、前の章で作成した「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コマンドラインからインスタンス内のすべてのデータベースのリストを取得する方法について説明します。
次のステートメントは、infoコマンドの基本的な構文です。
LIST DATABASES
Note −このコマンドは、ローカルサーバーまたはリモートサーバーに接続した後でのみ使用できます。
例
データベースのリストを取得する前に、リモートサーバーを介してローカルホストサーバーに接続する必要があります。ローカルホストインスタンスに接続するためのユーザー名とパスワードは、それぞれguestとguestであり、で構成されていることを忘れないでください。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/}>
ローカルホストデータベースサーバーに接続した後、次のコマンドを使用してデータベースを一覧表示できます。
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コマンドラインからデータベースをフリーズする方法を学習できます。
次のステートメントは、freezedatabaseコマンドの基本的な構文です。
FREEZE DATABASE
Note −このコマンドは、リモートデータベースまたはローカルデータベースの特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。このデータベースをCLIからフリーズします。
次のコマンドを使用して、データベースをフリーズできます。
Orientdb {db = demo}> FREEZE DATABASE
正常に実行されると、次の出力が得られます。
Database 'demo' was frozen successfully
この章では、OrientDBコマンドラインを使用してデータベースをフリーズ状態から解放する方法を学習できます。
次のステートメントは、Releasedatabaseコマンドの基本的な構文です。
RELEASE DATABASE
Note −このコマンドは、フリーズ状態にある特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。前の章でフリーズしたデータベースをリリースします。
次のコマンドを使用して、データベースを解放できます。
Orientdb {db = demo}> RELEASE DATABASE
正常に実行されると、次の出力が得られます。
Database 'demo' was release successfully
この章では、OrientDBコマンドラインを使用して特定のデータベースの構成を表示する方法を学習できます。このコマンドは、ローカルデータベースとリモートデータベースの両方に適用できます。
構成情報には、有効または無効のデフォルトキャッシュ、そのキャッシュのサイズ、負荷係数値、マップの最大メモリ、ノードページサイズ、プールの最小サイズと最大サイズなどが含まれます。
次のステートメントは、configdatabaseコマンドの基本的な構文です。
CONFIG
Note −このコマンドは、特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「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}>
上記の構成パラメーターのリストで、パラメーター値のいずれかを変更する場合は、configsetおよびgetコマンドを使用してコマンドラインから簡単に変更できます。
構成セット
を使用して構成変数値を更新できます。 CONFIG SET コマンド。
次のステートメントは、configsetコマンドの基本的な構文です。
CONFIG SET <config-variable> <config-value>
Note −このコマンドは、特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。'tx.autoRetry'変数値を5に変更します。
次のコマンドを使用して、デモデータベースの構成を設定できます。
orientdb {db = demo}> CONFIG SET tx.autoRetry 5
正常に実行されると、次の出力が得られます。
Local configuration value changed correctly
構成取得
を使用して構成変数値を表示できます。 CONFIG GET コマンド。
次のステートメントは、configgetコマンドの基本的な構文です。
CONFIG GET <config-variable>
Note −このコマンドは、特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。'tx.autoRetry'変数値を取得しようとします。
次のコマンドを使用して、デモデータベースの構成を表示できます。
orientdb {db = demo}> CONFIG GET tx.autoRetry
正常に実行されると、次の出力が得られます。
Local configuration: tx.autoRetry = 5
RDBMSと同様に、OrientDBもデータベースのエクスポートやインポートなどの機能を提供します。OrientDBは、JSON形式を使用してデータをエクスポートします。デフォルトでは、exportコマンドはGZIPアルゴリズムを使用してファイルを圧縮します。
データベースのエクスポート中は、データベースがロックされていません。つまり、データベースに対して読み取り操作と書き込み操作を同時に実行できます。また、読み取り操作と書き込み操作が同時に行われるため、そのデータの正確なコピーを作成できることも意味します。
この章では、OrientDBコマンドラインからデータベースをエクスポートする方法を学習できます。
次のステートメントは、データベースのエクスポートコマンドの基本的な構文です。
EXPORT DATABASE <output file>
Note −このコマンドは、特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「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
データベースをインポートするときは常に、exportコマンドによって生成されたJSON形式のエクスポートされたファイルを使用する必要があります。
この章では、OrientDBコマンドラインからデータベースをインポートする方法を学習できます。
次のステートメントは、Importdatabaseコマンドの基本的な構文です。
IMPORT DATABASE <input file>
Note −このコマンドは、特定のデータベースに接続した後でのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。次のコマンドを使用して、データベースを「export-demo.gz」という名前のファイルにインポートできます。
orientdb {db = demo}> IMPORT DATABASE ./export-demo.export.gz
正常に実行されると、正常な通知とともに次の出力が表示されます。
Database import completed in 11612ms
RDBMSと同様に、OrientDBもコミットやロールバックなどのトランザクションの概念を提供します。 Commit データベースへのすべての変更を保存してトランザクションを閉じることを指します。 Rollback トランザクションを開いた時点までデータベースの状態を回復することを指します。
次のステートメントは、Commitdatabaseコマンドの基本的な構文です。
COMMIT
Note −このコマンドは、特定のデータベースに接続した後、トランザクションを開始した後にのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。コミットトランザクションの操作を確認し、トランザクションを使用してレコードを保存します。
まず、以下を使用してトランザクションを開始します BEGIN コマンド。
orientdb {db = demo}> BEGIN
次に、次のコマンドを使用して、値id = 12およびname = satish.Pのレコードをemployeeテーブルに挿入します。
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
次のコマンドを使用して、トランザクションをコミットできます。
orientdb> commit
このトランザクションが正常にコミットされると、次の出力が得られます。
Transaction 2 has been committed in 4ms
この章では、OrientDBコマンドラインインターフェイスを介してコミットされていないトランザクションをロールバックする方法を学習します。
次のステートメントは、Rollbackdatabaseコマンドの基本的な構文です。
ROLLBACK
Note −このコマンドは、特定のデータベースに接続した後、トランザクションを開始した後にのみ使用できます。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。ロールバックトランザクションの動作を確認し、トランザクションを使用してレコードを保存します。
まず、以下を使用してトランザクションを開始します BEGIN コマンド。
orientdb {db = demo}> BEGIN
次に、次のコマンドを使用して、値id = 12およびname = satish.Pのレコードをemployeeテーブルに挿入します。
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
次のコマンドを使用して、Employeeテーブルからレコードを取得できます。
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
このコマンドが正常に実行されると、次の出力が得られます。
---+-------+--------------------
# | ID | name
---+-------+--------------------
0 | 12 | satish.P
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).
これで、次のコマンドを使用してこのトランザクションをロールバックできます。
orientdb> ROLLBACK
selectクエリをもう一度チェックして、employeeテーブルから同じレコードを取得します。
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
ロールバックが正常に実行されると、出力に0レコードが見つかります。
0 item(s) found. Query executed in 0.037 sec(s).
技術用語による Optimization「最短時間でより良いパフォーマンスを達成する」という意味です。データベースに関して、最適化には、データを取得する速度と効率を最大化することが含まれます。
OrientDBは軽量エッジをサポートします。これは、データエンティティ間の直接的な関係を意味します。簡単に言えば、それはフィールド間の関係です。OrientDBは、データベースを最適化するためのさまざまな方法を提供します。通常のエッジから軽量エッジへの変換をサポートします。
次のステートメントは、Optimizedatabaseコマンドの基本的な構文です。
OPTMIZE DATABASE [-lwedges] [-noverbose]
どこ lwedges 通常のエッジを軽量エッジに変換し、 noverbose 出力を無効にします。
例
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。次のoptimizedatabaseコマンドを使用できます。
OPTIMIZE DATABASE -lwedges
正常に実行されると、完了メッセージとともに成功した通知が表示されます。
Database Optimization completed in 35ms
RDBMSと同様に、OrientDBはデータベースを削除する機能を提供します。 Drop database データベースを完全に削除することを指します。
次のステートメントは、Dropdatabaseコマンドの基本的な構文です。
DROP DATABASE [<database-name> <server-username> <server-user-password>]
上記の構文のオプションの詳細は次のとおりです。
<database-name> −削除するデータベース名。
<server-username> −データベースを削除する権限を持つデータベースのユーザー名。
<server-user-password> −特定のユーザーのパスワード。
例
データベースを削除する方法は2つあります。1つは現在開いているデータベースを削除する方法、もう1つは特定の名前を指定して特定のデータベースを削除する方法です。
この例では、前の章で作成した「demo」という名前の同じデータベースを使用します。次のコマンドを使用して、データベースを削除できます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は、ドキュメントとグラフ指向のデータを保存できるNoSQLデータベースです。NoSQLデータベースにはテーブルが含まれていないため、データをレコードとして挿入するにはどうすればよいですか。ここでは、クラス、プロパティ、頂点、およびエッジの形式でテーブルデータを確認できます。つまり、クラスはテーブルに似ており、プロパティはテーブル内のファイルに似ています。
これらすべてのエンティティを使用して定義できます schemaOrientDBで。プロパティデータはクラスに挿入できます。挿入コマンドは、データベーススキーマに新しいレコードを作成します。レコードはスキーマレスにすることも、指定されたルールに従うこともできます。
次のステートメントは、InsertRecordコマンドの基本的な構文です。
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テーブルについて考えてみましょう。
シニア番号 | フィールド名 | タイプ |
---|---|---|
1 | Id | 整数 |
2 | 名前 | ストリング |
3 | 年齢 | 整数 |
次のコマンドを実行して、スキーマ(テーブル)を作成できます。
CREATE DATABASE PLOCAL:/opt/orientdb/databases/sales
CREATE CLASS Customer
CREATE PROPERTY Customer.id integer
CREATE PROPERTY Customer.name String
CREATE PROPERTY Customer.age integer
すべてのコマンドを実行すると、ID、名前、および年齢のフィールドを持つテーブル名Customerが表示されます。Customerテーブルに対してselectクエリを実行すると、テーブルを確認できます。
OrientDBは、レコードを挿入するさまざまな方法を提供します。サンプルレコードを含む次のCustomerテーブルについて考えてみます。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 29 |
次のコマンドは、最初のレコードをCustomerテーブルに挿入することです。
INSERT INTO Customer (id, name, age) VALUES (01,'satish', 25)
上記のコマンドが正常に実行されると、次の出力が得られます。
Inserted record 'Customer#11:0{id:1,name:satish,age:25} v1' in 0.069000 sec(s).
次のコマンドは、2番目のレコードを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).
次のコマンドは、3番目のレコードを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).
次のコマンドは、次の2つのレコードを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
----+-----+--------+----+-------+----
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 −キャッシュを使用するかどうかを定義します。
例
前の章で作成した次のCustomerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 29 |
さまざまなselectクエリを試して、Customerテーブルからデータレコードを取得します。
Method 1 −次のクエリを使用して、Customerテーブルからすべてのレコードを選択できます。
orientdb {db = demo}> SELECT FROM Customer
上記のクエリが正常に実行されると、次の出力が得られます。
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
2 |#11:2|Customer|3 |kiran |29
3 |#11:3|Customer|4 |javeed |21
4 |#11:4|Customer|5 |raja |29
----+-----+--------+----+-------+----
Method 2 −名前が文字 'で始まるすべてのレコードを選択しますk'。
orientdb {db = demo}> SELECT FROM Customer WHERE name LIKE 'k%'
または、上記の例で次のクエリを使用できます。
orientdb {db = demo}> SELECT FROM Customer WHERE name.left(1) = 'k'
上記のクエリが正常に実行されると、次の出力が得られます。
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:1|Customer|2 |krishna|26
1 |#11:2|Customer|3 |kiran |29
----+-----+--------+----+-------+----
Method 3 −名前が大文字のCustomerテーブルからid、nameレコードを選択します。
orientdb {db = demo}> SELECT id, name.toUpperCase() FROM Customer
上記のクエリが正常に実行されると、次の出力が得られます。
----+--------+----+-------
# |@CLASS |id |name
----+--------+----+-------
0 |null |1 |SATISH
1 |null |2 |KRISHNA
2 |null |3 |KIRAN
3 |null |4 |JAVEED
4 |null |5 |RAJA
----+--------+----+-------
Method 4 −年齢が25〜29の範囲にあるCustomerテーブルからすべてのレコードを選択します。
orientdb {db = demo}> SELECT FROM Customer WHERE age in [25,29]
上記のクエリが正常に実行されると、次の出力が得られます。
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:2|Customer|3 |kiran |29
2 |#11:4|Customer|5 |raja |29
----+-----+--------+----+-------+----
Method 5 −任意のフィールドに単語「sh」が含まれているCustomerテーブルからすべてのレコードを選択します。
orientdb {db = demo}> SELECT FROM Customer WHERE ANY() LIKE '%sh%'
上記のクエリが正常に実行されると、次の出力が得られます。
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
----+-----+--------+----+-------+----
Method 6 − Customerテーブルからすべてのレコードを選択し、年齢の降順で並べ替えます。
orientdb {db = demo}> SELECT FROM Customer ORDER BY age DESC
上記のクエリが正常に実行されると、次の出力が得られます。
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:2|Customer|3 |kiran |29
1 |#11:4|Customer|5 |raja |29
2 |#11:1|Customer|2 |krishna|26
3 |#11:0|Customer|1 |satish |25
4 |#11:3|Customer|4 |javeed |21
----+-----+--------+----+-------+----
Load Recordスキーマから特定のレコードをロードするために使用されます。レコードのロードは、レコードIDを使用してレコードをロードします。それはで表されます@rid 結果セットの記号。
次のステートメントは、LOADRecordコマンドの基本的な構文です。
LOAD RECORD <record-id>
どこ <record-id> ロードするレコードのレコードIDを定義します。
特定のレコードのレコードIDがわからない場合は、テーブルに対して任意のクエリを実行できます。結果セットには、それぞれのレコードのレコードID(@rid)があります。
例
前の章で使用したのと同じCustomerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 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 |
+---------------------------------------------------------------------------+
Reload RecordLoad Recordコマンドと同様に機能し、スキーマから特定のレコードをロードするためにも使用されます。レコードのロードは、レコードIDを使用してレコードをロードします。それはで表されます@rid結果セットの記号。主な違いは、レコードのリロードがキャッシュを無視することです。これは、外部の同時トランザクションを適用してレコードを変更する場合に役立ちます。最新のアップデートを提供します。
次のステートメントは、RELOADRecordコマンドの基本的な構文です。
RELOAD RECORD <record-id>
どこ <record-id> リロードするレコードのレコードIDを定義します。
特定のレコードのレコードIDがわからない場合は、テーブルに対して任意のクエリを実行できます。結果セットには、それぞれのレコードのレコードID(@rid)があります。
例
前の章で使用したのと同じCustomerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 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 |
+---------------------------------------------------------------------------+
Export Recordロードされたレコードを要求されサポートされている形式にエクスポートするために使用されるコマンドです。間違った構文を実行している場合は、サポートされている形式のリストが表示されます。OrientDBはドキュメントデータベースのファミリーであるため、JSONがデフォルトでサポートされている形式です。
次のステートメントは、ExportRecordコマンドの基本的な構文です。
EXPORT RECORD <format>
どこ <Format> レコードを取得する形式を定義します。
Note − Exportコマンドは、ロードされたレコードをレコードIDに基づいてエクスポートします。
例
前の章で使用したのと同じCustomerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 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
}
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−ロードと更新の間にレコードをロックする方法を指定します。指定するオプションが2つありますDefault そして Record。
UPSERT−レコードが存在する場合は更新し、存在しない場合は新しいレコードを挿入します。これは、2つのクエリを実行する代わりに1つのクエリを実行するのに役立ちます。
RETURN −レコード数の代わりに、返す式を指定します。
LIMIT −更新するレコードの最大数を定義します。
TIMEOUT −タイムアウトする前に更新の実行を許可する時間を定義します。
例
前の章で使用したのと同じCustomerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 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
----+-----+--------+----+-------+----
Truncate Record コマンドは、特定のレコードの値を削除するために使用されます。
次のステートメントは、Truncateコマンドの基本的な構文です。
TRUNCATE RECORD <rid>*
どこ <rid>*は、切り捨てるレコードIDを示します。カンマで区切られた複数のRidを使用して、複数のレコードを切り捨てることができます。切り捨てられたレコードの数を返します。
例
前の章で使用したのと同じCustomerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 21 |
5 | ラジャ | 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
----+-----+--------+----+-------+----
Delete Record コマンドは、データベースから1つ以上のレコードを完全に削除するために使用されます。
次のステートメントは、Deleteコマンドの基本的な構文です。
DELETE FROM <Class>|cluster:<cluster>|index:<index>
[LOCK <default|record>]
[RETURN <returning>]
[WHERE <Condition>*]
[LIMIT <MaxRecords>]
[TIMEOUT <timeout>]
上記の構文のオプションの詳細は次のとおりです。
LOCK−ロードと更新の間にレコードをロックする方法を指定します。指定するオプションが2つありますDefault そして Record。
RETURN −レコード数の代わりに、返す式を指定します。
LIMIT −更新するレコードの最大数を定義します。
TIMEOUT −タイムアウトする前に更新の実行を許可する時間を定義します。
Note −グラフの整合性に影響するため、DELETEを使用して頂点またはエッジを削除しないでください。
例
Customerテーブルについて考えてみましょう。
シニア番号 | 名前 | 年齢 |
---|---|---|
1 | サティッシュ | 25 |
2 | クリシュナ | 26 |
3 | キラン | 29 |
4 | ジェイブド | 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はマルチモデル機能をサポートし、データベースの基本概念にアプローチして理解するためのさまざまな方法を提供します。ただし、ドキュメントデータベースAPIの観点から、これらのモデルに簡単にアクセスできます。RDBMSと同様に、OrientDBもストレージの要素としてレコードを使用しますが、ドキュメントタイプを使用します。ドキュメントは、キーと値のペアの形式で保存されます。フィールドとプロパティを、conceptsクラスに属するキー/値のペアとして格納しています。
Classはデータモデルの一種であり、概念はオブジェクト指向プログラミングパラダイムから引き出されています。従来のドキュメントデータベースモデルに基づいて、データはコレクションの形式で保存されますが、リレーショナルデータベースモデルデータではテーブルに保存されます。OrientDBは、OPPSパラダイムとともにDocumentAPIに従います。概念として、OrientDBのクラスは、リレーショナルデータベースのテーブルと最も近い関係にありますが、(テーブルとは異なり)クラスは、スキーマなし、スキーマフル、または混合にすることができます。クラスは他のクラスから継承して、クラスのツリーを作成できます。各クラスには独自のクラスターがあります(定義されていない場合は、デフォルトで作成されます)。
次のステートメントは、CreateClassコマンドの基本的な構文です。
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
次のコマンドを使用してクラスを作成できます Car クラスにまで及ぶ Vehicle。
orientdb> CREATE CLASS Car EXTENDS Vehicle
上記のコマンドが正常に実行されると、次の出力が得られます。
Class created successfully
次のコマンドを使用して、クラスPersonを抽象として作成できます。
orientdb> CREATE CLASS Person ABSTRACT
上記のコマンドが正常に実行されると、次の出力が得られます。
Class created successfully
Note−プロパティがないと、クラスは役に立たず、実際のオブジェクトを構築できません。以降の章では、特定のクラスのプロパティを作成する方法を学習できます。
OrientDBのクラスとプロパティは、クラス名、スーパークラス、クラスター、クラスター数、抽象などのそれぞれの属性を持つスキーマを構築するために使用されます。スキーマ内の既存のクラスの属性を変更または更新する場合は、あなたが使用する必要があります Alter Class コマンド。
次のステートメントは、AlterClassコマンドの基本的な構文です。
ALTER CLASS <class> <attribute-name> <attribute-value>
上記の構文のオプションの詳細は次のとおりです。
<class> −クラス名を定義します。
<attribute-name> −変更する属性を定義します。
<attribute-value> −属性に設定する値を定義します。
次の表は、AlterClassコマンドをサポートする属性のリストを定義しています。
属性 | タイプ | 説明 |
---|---|---|
名前 | ストリング | クラス名を変更します。 |
SHORTNAME | ストリング | クラスの短い名前(つまり、エイリアス)を定義します。NULLを使用して、短い名前の割り当てを削除します。 |
スーパークラス | ストリング | クラスのスーパークラスを定義します。新しいクラスを追加するには、構文+ <class>を使用し、削除するには-<class>を使用します。 |
特大 | 10進数 | 特大係数を定義します。 |
ADDCLUSTER | ストリング | クラスにクラスターを追加します。クラスターが存在しない場合は、物理クラスターが作成されます。クラスにクラスターを追加すると、分散サーバーにレコードを保存する場合にも役立ちます。 |
REMOVECLUSTER | ストリング | クラスからクラスターを削除します。クラスターは削除されず、クラスから削除されるだけです。 |
STRICTMODE | - | 厳密モードを有効または無効にします。strictモードでは、スキーマフルモードで作業し、クラスのスキーマ定義の一部である場合、レコードに新しいプロパティを追加することはできません。 |
CLUSTERSELECTION | - | 新しいレコードに使用するクラスターを選択する際の選択戦略を定義します。 |
カスタム | - | カスタムプロパティを定義します。プロパティの名前と値は、名前と値の間にスペースを入れずに、構文<propertyname> = <value>に従う必要があります。 |
概要 | ブール値 | クラスを抽象クラスまたはその逆に変換します。 |
例
既存のクラスの属性を更新または変更するいくつかの例を試してみましょう。
次のクエリは、既存のクラス「Employee」のスーパークラス「Person」を定義するために使用されます。
orientdb> ALTER CLASS Employee SUPERCLASS Person
上記のクエリが正常に実行されると、次の出力が得られます。
Class altered successfully
次のクエリは、既存のクラス「Employee」のスーパークラス「Person」を追加するために使用されます。
orientdb> ALTER CLASS Employee SUPERCLASS +Person
上記のクエリが正常に実行されると、次の出力が得られます。
Class altered successfully
Truncate classクラスの一部として定義されたクラスターのすべてのレコードを削除します。OrientDBでは、すべてのクラスに同じ名前のクラスターが関連付けられています。クラス階層からすべてのレコードも削除する場合は、POLYMORPHICキーワードを使用する必要があります。
次のステートメントは、Truncate ClassCommandの基本的な構文です。
TRUNCATE CLASS <class> [ POLYMORPHIC ] [ UNSAFE ]
上記の構文のオプションの詳細は次のとおりです。
<class> −切り捨てるクラスを定義します。
POLYMORPHIC −コマンドが階層も切り捨てるかどうかを定義します。
UNSAFE −頂点またはエッジクラスで強制的に切り捨てられるコマンドを定義します。
例
クラスを切り捨てるための次のクエリ Profile。
orientdb> TRUNCATE CLASS Profile
上記のクエリが正常に実行されると、次の出力が得られます。
Class truncated successfully
ザ・ Drop Classコマンドは、スキーマからクラスを削除します。注意を払い、一貫したスキーマを維持することが重要です。たとえば、他のスーパークラスであるクラスを削除することは避けてください。関連するクラスターは削除されません。
次のステートメントは、DropClassコマンドの基本的な構文です。
DROP CLASS <class>
クラス名を持つクラスを削除します。
例
次のクエリを試して、クラスEmployeeを削除します。
Orientdb> DROP CLASS Employee
上記のクエリが正常に実行されると、次の出力が得られます。
Class dropped successfully
Clusterは、レコード、ドキュメント、または頂点を格納するために使用されるOrientDBの重要な概念です。簡単に言うと、クラスターはレコードのグループが格納される場所です。デフォルトでは、OrientDBはクラスごとに1つのクラスターを作成します。クラスのすべてのレコードは、クラスと同じ名前の同じクラスターに格納されます。データベースには最大32,767(2 ^ 15-1)個のクラスターを作成できます。
CREATEクラスは、特定の名前でクラスターを作成するために使用されるコマンドです。クラスターが作成されると、クラスターを使用して、データモデルの作成中に名前を指定することにより、レコードを保存できます。クラスに新しいクラスターを追加する場合は、AlterClassコマンドとADDCLUSTERコマンドを使用します。
次のステートメントは、CreateClusterコマンドの基本的な構文です。
CREATE CLUSTER <cluster> [ID <cluster-id>]
どこ <cluster> 作成するクラスターの名前を定義し、 <cluster-id> クラスターに使用する数値IDを定義します。
次の表に、クラスター選択戦略のリストを示します。
シニア番号 | 戦略と説明 |
---|---|
1 | Default クラスプロパティdefaultClusterIdを使用してクラスターを選択します。 |
2 | Round-robin 次のクラスターを循環順に選択します。完了すると再起動します。 |
3 | Balanced 最小のクラスターを選択します。クラスで、基礎となるすべてのクラスターのサイズのバランスをとることができます。新しいクラスターを既存のクラスに追加すると、最初に新しいクラスターがいっぱいになります。 |
例
salesという名前のクラスターを作成する例を見てみましょう。
orientdb> CREATE CLUSTER sales
上記のクエリが正常に実行されると、次の出力が得られます。
Cluster created correctly with id #12
Alter Clusterコマンドは、既存のクラスターの属性を更新することです。この章では、クラスターの属性を追加または変更する方法を学習できます。
次のステートメントは、AlterClusterコマンドの基本的な構文です。
ALTER CLUSTER <cluster> <attribute-name> <attribute-value>
上記の構文のオプションの詳細は次のとおりです。
<cluster> −クラスター名を定義します。
<attribute-name> −変更する属性を定義します。
<attribute-value> −この属性に設定する値を定義します。
次の表形式は、Alterclusterコマンドとともに使用できるサポートされている属性のリストを示しています。
名前 | タイプ | 説明 |
---|---|---|
名前 | ストリング | クラスター名を変更します。 |
状態 | ストリング | クラスターのステータスを変更します。許可される値はONLINEとOFFLINEです。デフォルトでは、クラスターはオンラインです。 |
圧縮 | ストリング | 使用する圧縮タイプを定義します。許可される値は、NOTHING、SNAPPY、GZIP、およびOCompressionFactoryクラスに登録されているその他の圧縮タイプです。 |
USE_WAL | ブール値 | OrientDBがクラスターに対して動作するときにジャーナルを使用するかどうかを定義します |
RECORD_GROW_FACTO R | 整数 | レコード作成のスペースを節約するための拡張係数を定義します。これは、追加情報でレコードを更新するときに役立つ場合があります。 |
RECORD_OVERFLOW_GR OW_FACTOR | 整数 | 更新時の成長係数を定義します。サイズ制限に達すると、はこの設定を使用してより多くのスペースを取得します(係数> 1)。 |
競合戦略 | ストリング | OrientDB MVCCが古いレコードに対して実行する更新または削除操作を検出した場合に、競合を処理するために使用する戦略を定義します。 |
次の表に、競合戦略のリストを示します。
シニア番号 | 戦略と説明 |
---|---|
1 | Version バージョンが異なる場合は例外をスローします。これがデフォルト設定です。 |
2 | Content バージョンが異なる場合は、コンテンツの変更をチェックします。それ以外の場合は、例外がスローされないように、最も高いバージョンを使用します。 |
3 | Automerge 変更をマージします。 |
例
次のクエリ例を試して、Alterclusterコマンドを学習してください。
次のコマンドを実行して、クラスターの名前を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
ザ・ Truncate Cluster コマンドは、クラスターのすべてのレコードを削除します。
次のステートメントは、Truncate ClusterCommandの基本的な構文です。
TRUNCATE CLUSTER <cluster-name>
どこ <cluster-name> はクラスターの名前です。
例
次のクエリを試して、salesという名前のクラスターを切り捨てます。
Orientdb {db = demo}> TRUNCATE CLUSTER Profile
上記のクエリが正常に実行されると、次の出力が得られます。
Cluster truncated successfully.
ザ・ Drop Clusterコマンドは、クラスターとそれに関連するすべてのコンテンツを削除します。この操作は永続的でロールバックされます。
次のステートメントは、DropClusterコマンドの基本的な構文です。
DROP CLUSTER <cluster-name>|<cluster-id>
どこ <cluster-name> 削除するクラスターの名前を定義し、 <cluster-id> 削除するクラスターのIDを定義します。
例
次のコマンドを試して、Salesクラスターを削除します。
orientdb> DROP CLUSTER Sales
上記のクエリが正常に実行されると、次の出力が得られます。
Cluster dropped successfully
PropertyOrientDBでは、データベーステーブルのクラスと列のフィールドのように機能します。プロパティの作成は、特定のクラスのプロパティを作成するために使用されるコマンドです。コマンドで使用したクラス名が存在している必要があります。
次のステートメントは、CreatePropertyコマンドの基本的な構文です。
CREATE PROPERTY <class-name>.<property-name> <property-type> [<linked-type>][ <linked-class>]
上記の構文のオプションの詳細は次のとおりです。
<class-name> −プロパティを作成するクラスを定義します。
<property-name> −プロパティの論理名を定義します。
<property-type> −作成するプロパティのタイプを定義します。
<linked-type> −コンテナプロパティタイプで使用されるコンテナタイプを定義します。
<linked-class> −コンテナプロパティタイプで使用されるコンテナクラスを定義します。
次の表は、OrientDBが格納するデータのタイプを認識できるように、プロパティのデータ型を示しています。
ブール | 整数 | ショート | 長いです |
浮く | 日付 | ストリング | 埋め込み |
リンク | バイト | バイナリ | ダブル |
これらに加えて、コンテナとして機能する他のいくつかのプロパティタイプがあります。
埋め込みリスト | EMBEDDEDSET | EMBEDDEDMAP |
リンクリスト | リンクセット | リンクマップ |
例
次の例を試して、String型のクラスEmployeeにプロパティ名を作成してください。
orientdb> CREATE PROPERTY Employee.name STRING
上記のクエリが正常に実行されると、次の出力が得られます。
Property created successfully with id = 1
Alter Property特定のクラスのプロパティを変更または更新するために使用されるコマンドです。プロパティを変更するということは、テーブルのフィールドを変更することを意味します。この章では、プロパティを更新する方法を学習できます。
次のステートメントは、Alter PropertyCommandの基本的な構文です。
ALTER PROPERTY <class>.<property> <attribute-name> <attribute-value>
上記の構文のオプションの詳細は次のとおりです。
<class> −プロパティが属するクラスを定義します。
<property> −更新するプロパティを定義します。
<attribute-name> −更新するプロパティの属性を定義します。
<attribute-value> −属性に設定する値を定義します。
次の表は、プロパティを変更するための属性のリストを定義しています。
属性 | タイプ | 説明 |
---|---|---|
LINKEDCLASS | ストリング | リンクされたクラス名を定義します。NULLを使用して、既存の値を削除します。 |
LINKEDTYPE | ストリング | リンクタイプを定義します。NULLを使用して、既存の値を削除します。 |
MIN | 整数 | 最小値を制約として定義します。NULLを使用して、既存の制約を削除します。 |
必須 | ブール値 | プロパティに値が必要かどうかを定義します。 |
MAX | 整数 | 最大値を制約として定義します。NULLを使用して、既存の制約を削除します。 |
名前 | ストリング | プロパティ名を定義します。 |
NOTNULL | ブール値 | プロパティがNULL値を持つことができるかどうかを定義します。 |
正規表現 | ストリング | 正規表現を制約として定義します。NULLを使用して、既存の制約を削除します。 |
タイプ | ストリング | プロパティタイプを定義します。 |
照合 | ストリング | セットは、定義された比較戦略の1つに照合されます。デフォルトでは、大文字と小文字が区別される(cs)に設定されています。大文字と小文字を区別しない(ci)に設定することもできます。 |
読み取り専用 | ブール値 | プロパティ値が不変であるかどうかを定義します。つまり、最初の割り当て後に変更できる場合です。DEFAULTとともに使用して、作成時に不変の値を設定します。 |
カスタム | ストリング | カスタムプロパティを定義します。カスタムプロパティの構文は、ステレオタイプ=アイコンなどの<カスタム名> = <カスタム値>です。 |
デフォルト | デフォルト値または関数を定義します。 |
Note − NAMEまたはTYPEを変更する場合、データ量によっては、このコマンドの更新に時間がかかる場合があります。
例
Alterプロパティを理解するために、以下に示すいくつかのクエリを試してください。
次のクエリを実行して、Customerクラスのプロパティの名前を「age」から「born」に変更します。
orinetdb {db = demo}> ALTER PROPERTY Customer.age NAME born
上記のクエリが正常に実行されると、次の出力が得られます。
Property altered successfully
次のクエリを実行して、「name」をクラス「Customer」の必須プロパティとして作成します。
orientdb {db = demo}> ALTER PROPERTY Customer.name MANDATORY TRUE
上記のクエリが正常に実行されると、次の出力が得られます。
Property altered successfully
ザ・ Drop propertyコマンドは、スキーマからプロパティを削除します。レコードからプロパティ値を削除するのではなく、スキーマを変更するだけです。
次のステートメントは、Drop PropertyCommandの基本的な構文です。
DROP PROPERTY <class>.<property> [FORCE]
上記の構文のオプションの詳細は次のとおりです。
<class> −プロパティが存在するクラスを定義します。
<property> −削除するプロパティを定義します。
[Force] −プロパティに1つ以上のインデックスが定義されている場合。
例
次のコマンドを試して、クラス「Customer」から「age」プロパティを削除してください。
orientdb> DROP PROPERTY Customer.age
上記のコマンドが正常に実行されると、次の出力が得られます。
Property dropped successfully
OrientDBデータベースは、ドキュメントデータベースであるだけでなく、グラフデータベースでもあります。頂点やエッジなどの新しい概念を使用して、データをグラフの形式で保存します。頂点に多形を適用します。Vertexの基本クラスはVです。
この章では、グラフデータを格納する頂点を作成する方法を学習できます。
次のステートメントは、Create VertexCommandの基本的な構文です。
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のMoveVertexコマンドは、1つまたは複数の頂点を現在の場所から別のクラスまたはクラスターに移動することです。特定の頂点に移動コマンドを適用すると、この頂点に接続されているすべてのエッジが更新されます。頂点を移動するクラスターを指定している場合は、頂点をターゲットクラスターのサーバー所有者に移動します。
次のステートメントは、Move VertexCommandの基本的な構文です。
MOVE VERTEX <source> TO <destination>
[SET [<field>=<value>]* [,]]
[MERGE <JSON>]
[BATCH <batch-size>]
上記の構文のオプションの詳細は次のとおりです。
<source>−移動する頂点を定義します。特定の頂点のレコードIDまたは頂点のレコードIDの配列を受け入れます。
<destination>−頂点を移動する場所を定義します。宛先としてクラスまたはクラスターのいずれかをサポートします。
SET −値をフィールドに設定します。
MERGE −JSONを介してフィールドに値を設定します。
BATCH −バッチサイズを定義します。
Note−このコマンドは、接続されているすべてのエッジを更新しますが、リンクは更新しません。Graph APIを使用する場合は、頂点に接続されたエッジを使用することをお勧めします。
例
次の例を試して、頂点を移動する方法を学習してください。
次のクエリを実行して、レコードID#11:2の単一の頂点を現在の位置からクラス従業員に移動します。
orientdb> MOVE VERTEX #11:2 TO CLASS:Employee
上記のクエリが正常に実行されると、次の出力が得られます-
Move vertex command executed with result '[{old:#11:2, new:#13:0}]' in 0.022000 sec(s)
次のクエリを実行して、頂点のセットをクラス「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)
Delete Vertexコマンドは、データベースから頂点を削除するために使用されます。削除中は、エッジとの整合性をチェックして維持し、削除された頂点への(エッジとの)すべての相互参照を削除します。
次のステートメントは、Delete VertexCommandの基本的な構文です。
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では、コンセプト Edgeいくつかのプロパティの助けを借りて、頂点間の関係のように機能します。エッジと頂点は、グラフデータベースの主要なコンポーネントです。エッジに多形を適用します。エッジの基本クラスはEです。エッジの実装中に、ソース頂点または宛先頂点が欠落しているか存在しない場合、トランザクションはロールバックされます。
次のステートメントは、Create EdgeCommandの基本的な構文です。
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)
Update edgeコマンドは、現在のデータベースのエッジレコードを更新するために使用されます。これは、頂点とのグラフの整合性をチェックおよび維持することに加えて、実際の更新コマンドと同等です。out そして in プロパティ。
次のステートメントは、Update EdgeCommandの基本的な構文です。
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 −レコードの最大数を定義します。
例
エリアId = 001、人物名= Krishnaのアドレステーブルからデータを取得して、人物クラスの「address」という名前のエッジを更新する例を考えてみましょう。
orientdb> UPDATE EDGE address SET out = (SELECT FROM Address WHERE areaID = 001)
WHERE name = 'krishna'
上記のクエリが正常に実行されると、次の出力が得られます。
Updated edge '[address[#10:3][#11:3->#14:2]]' in 0.012000 sec(s)
Delete edgeコマンドはデータベースを削除するために使用されます。これはdeleteコマンドと同等ですが、「in」と「out」の両方の頂点プロパティからエッジへのすべての相互参照を削除することにより、頂点との整合性をチェックおよび維持することが追加されています。
次のステートメントは、DeleteEdgeコマンドの基本的な構文です。
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 −操作のブロックサイズを定義します。
例
次の例を試して、エッジを削除する方法を学習してください。
次のクエリを実行して、2つの頂点(#11:2、#11:10)の間のエッジを削除します。ただし、2つの頂点の間に1つ以上のエッジが存在する可能性があります。そのため、適切な機能のために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のさまざまなタイプの関数の完全なリファレンスについて説明します。次の表は、機能ごとに分類された機能のリストを定義しています。
グラフ関数
シニア番号 | 関数名と説明 |
---|---|
1 | Out(): 現在のレコードから開始する隣接する発信頂点を頂点として取得します。 Syntax − out([<label-1>] [、<label-n>] *) |
2 | In(): 現在のレコードから開始する隣接する入力頂点を頂点として取得します。 Syntax − in([<label-1>] [、<label-n>] *) |
3 | Both(): 現在のレコードから開始して、隣接する発信頂点と着信頂点を頂点として取得します。 Syntax −両方([<label1>] [、<label-n>] *) |
4 | outE(): 現在のレコードから開始する隣接する発信エッジを頂点として取得します。 Syntax − outE([<label1>] [、<label-n>] *) |
5 | inE(): 現在のレコードから開始する隣接する入力エッジを頂点として取得します。 Syntax − inE([<label1>] [、<label-n>] *) |
6 | bothE(): 現在のレコードから開始する隣接する発信エッジと着信エッジを頂点として取得します。 Syntax − bothE([<label1>] [、<label-n>] *) |
7 | outV(): 現在のレコードから開始する発信頂点をEdgeとして取得します。 Syntax − outV() |
8 | inV(): 現在のレコードから入力頂点をEdgeとして取得します。 Syntax − inV() |
9 | traversedElement(): トラバースコマンドでトラバースされた要素を返します。 Syntax − traversedElement(<index> [、<items>]) |
10 | traversedVertex(): トラバースコマンドでトラバースされた頂点を返します。 Syntax − traversedVertex(<index> [、<items>]) |
11 | traversedEdge(): トラバースコマンドでトラバースされたエッジを返します。 Syntax − traversedEdge(<index> [、<items>]) |
12 | shortestPath(): 2つの頂点間の最短経路を返します。方向は、OUT(デフォルト)、IN、またはBOTHのいずれかです。 Synatx − shortestPath(<sourceVertex>、<destinationVertex> [、<direction> [、<edgeClassName>]]) |
13 | dijkstra(): ダイクストラアルゴリズムを使用して、2つの頂点間の最も安いパスを返します。 Syntax − 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
---+----------+-------+-------
数学関数
シニア番号 | 関数名と説明 |
---|---|
1 | eval(): 引用符(または二重引用符)間の式を評価します。 Syntax − eval( '<式>') |
2 | min(): 最小値を返します。複数のパラメーターを指定して呼び出された場合、すべての引数の間に最小の引数値が返されます。 Syntax − min(<field> [、<field-n>] *) |
3 | max(): 最大値を返します。複数のパラメータを指定して呼び出された場合は、すべての引数間の最大値を返します。 Syntax − max(<field> [、<field-n>] *) |
4 | sum() 返されたすべての値の合計を返します。 Syntax − sum(<field>) |
5 | abs(): 絶対値を返します。Integer、Long、Short、Double、Float、BigInteger、BigDecimal、nullで機能します。 Syntax − abs(<フィールド>) |
6 | avg(): 平均値を返します。 Syntax − avg(<field>) |
7 | count(): クエリ条件に一致するレコードをカウントします。*がフィールドとして使用されていない場合、レコードはコンテンツがnullでない場合にのみカウントされます。 Syntax − count(<field>) |
8 | mode(): 最も頻度が高い値を返します。ヌルは計算で無視されます。 Syntax −モード(<フィールド>) |
9 | median(): 値がソートされた後の中間値または中間値を表す補間値を返します。ヌルは計算で無視されます。 Syntax −中央値(<フィールド>) |
10 | percentile(): n番目のパーセンタイルを返します。ヌルは計算で無視されます。 Syntax −パーセンタイル(<フィールド> [、<分位数-n>] *) |
11 | variance() 中央の分散を返します:平均からの差の二乗の平均。
Syntax −分散(<フィールド>) |
12 | stddev() 標準偏差を返します。値の広がりの尺度。ヌルは計算で無視されます。 Syntax − 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
---+----------+---------
コレクション機能
シニア番号 | 関数名と説明 |
---|---|
1 | set(): セットに値を追加します。値がコレクションの場合はセットとマージされ、そうでない場合は<value>が追加されます。 Syntax − set(<field>) |
2 | map(): マップが最初に作成されたときに、マップに値を追加します。<value>がマップの場合、マップとマージされます。それ以外の場合、<key>と<value>のペアが新しいエントリとしてマップに追加されます。 Syntax − map(<key>、<value>) |
3 | ist(): リストが最初に作成されたときに、リストに値を追加します。<value>がコレクションの場合はリストとマージされ、そうでない場合は<value>がリストに追加されます。 Syntax −リスト(<フィールド>) |
4 | difference(): アグリゲートまたはインラインとして機能します。渡された引数が1つだけの場合は集計され、それ以外の場合は実行され、パラメーターとして受け取ったコレクション間のDIFFERENCEが返されます。 Syntax −差分(<フィールド> [、<フィールド-n>] *) |
5 | first(): 複数値フィールド(配列、コレクション、およびマップ)の最初のアイテムのみを取得します。非複数値型の場合は、値を返すだけです。 Syntax − first(<field>) |
6 | intersect(): アグリゲートまたはインラインとして機能します。渡された引数が1つだけの場合は、パラメーターとして受け取ったコレクションのINTERACTIONを集計するか、実行して返します。 Syntax −交差(<フィールド> [、<フィールド-n>] *) |
7 | distinct(): 引数として指定したフィールドに応じて、一意のデータエントリのみを取得します。標準のSQLDISTINCTとの主な違いは、OrientDBでは、括弧付きの関数と1つのフィールドしか指定できないことです。 Syntax −distinct(<フィールド>) |
8 | expand(): この関数には2つの意味があります-
Syntax − Expand(<フィールド>) |
9 | unionall(): アグリゲートまたはインラインとして機能します。引数が1つだけ渡された場合は集計され、それ以外の場合は実行され、パラメーターとして受け取ったすべてのコレクションのUNIONが返されます。コレクション値なしでも機能します。 Syntax − unionall(<field> [、<field-n>] *) |
10 | flatten(): フィールド内のコレクションを抽出し、結果として使用します。非推奨です。代わりにexpand()を使用してください。 Syntax − flatten(<field>) |
11 | last(): 複数値フィールド(配列、コレクション、およびマップ)の最後のアイテムのみを取得します。非複数値型の場合は、値を返すだけです。 Syntax − last(<field>) |
12 | symmetricDifference(): アグリゲートまたはインラインとして機能します。渡された引数が1つだけの場合は、パラメーターとして受け取ったコレクション間のSYMMETRIC DIFFERENCEを集計し、そうでない場合は実行して返します。 Syntax − 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
---+----------+-------+---------------------------
その他の機能
シニア番号 | 関数名と説明 |
---|---|
1 | date(): 文字列をフォーマットする日付を返します。<date-as-string>は文字列形式の日付であり、<format>はこれらの規則に従った日付形式です。 Syntax − date(<date-as-string> [<format>] [、<timezone>]) |
2 | sysdate(): 現在の日付と時刻を返します。 Syntax − sysdate([<format>] [、<timezone>]) |
3 | format(): String.format()規則を使用して値をフォーマットします。 Syntax − format(<format> [、<arg1>](、<arg-n>] *。md) |
4 | distance(): Haversineアルゴリズムを使用して、地球内の2点間の距離を返します。座標は度でなければなりません。 Syntax −距離(<x-field>、<y-field>、<x-value>、<y-value>) |
5 | ifnull(): 渡されたフィールド/値(またはオプションのパラメーターreturn_value_if_not_null)を返します。フィールド/値がnullでない場合は、return_value_if_nullを返します。 Syntax − ifnull(<field | value>、<return_value_if_null> [、<return_value_if_not_null>](、<field&.md#124; value>] *) |
6 | coalesce(): nullではない最初のフィールド/値パラメータを返します。nullでないフィールド/値がない場合は、nullを返します。 Syntax −coalesce(<フィールド|値> [、<フィールド-n |値-n>] *) |
7 | uuid(): Leach-Salzバリアントを使用して、UUIDを128ビット値として生成します。 Syntax − uuid() |
8 | if(): 条件(最初のパラメーター)を評価し、条件が真の場合は2番目のパラメーターを返し、そうでない場合は3番目のパラメーターを返します。 Syntax − if(<式>、<結果-if-true>、<結果-if-false>) |
次のクエリを使用して、その他の関数をいくつか試してください。
次のクエリを実行して、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のデータを簡単に操作できます。
Sequencesは自動インクリメントメカニズムで使用される概念であり、OrientDBv2.2で導入されています。データベースの用語では、シーケンスはカウンターフィールドを管理する構造です。簡単に言うと、シーケンスは、常に増分する数値が必要な場合に主に使用されます。2つのタイプをサポートします-
ORDERED −ポインタが新しい値を返す.nextメソッドを呼び出すたび。
CACHED−シーケンスは、各ノードの「N」アイテムをキャッシュします。私たちが使用する各アイテムを呼び出すために.next()、これは、キャッシュに複数のアイテムが含まれている場合に推奨されます。
シーケンスの作成
シーケンスは通常、人のID値を自動インクリメントするために使用されます。OrientDBの他のSQL概念と同様に、RDBMSのSequenceと同様の操作を実行します。
次のステートメントは、シーケンスを作成するための基本的な構文です。
CREATE SEQUENCE <sequence> TYPE <CACHED|ORDERED> [START <start>]
[INCREMENT <increment>] [CACHE <cache>]
上記の構文のオプションの詳細は次のとおりです。
<Sequence> −シーケンスのローカル名。
TYPE −シーケンスタイプORDEREDまたはCACHEDを定義します。
START −初期値を定義します。
INCREMENT −各.nextメソッド呼び出しの増分を定義します。
CACHE −シーケンスタイプをキャッシュするために使用した場合に、プリキャッシュする値の数を定義します。
番号1201で始まる「seqid」という名前のシーケンスを作成しましょう。次のクエリを試して、この例をシーケンスで実装します。
CREATE SEQUENCE seqid START 1201
上記のクエリが正常に実行されると、次の出力が得られます。
Sequence created successfully
次のクエリを試して、シーケンス「seqid」を使用してアカウントテーブルのID値を挿入します。
INSERT INTO Account SET id = sequence('seqid').next()
上記のクエリが正常に実行されると、次の出力が得られます。
Insert 1 record(s) in 0.001000 sec(s)
シーケンスの変更
シーケンスの変更は、シーケンスのプロパティを変更するために使用されるコマンドです。シーケンスタイプを除くすべてのシーケンスオプションを変更します。
次のステートメントは、シーケンスを変更するための基本的な構文です。
ALTER SEQUENCE <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
Index データベース内のデータの場所を指すポインタです。 Indexingは、データベース内のすべてのレコードを検索しなくても、データをすばやく見つけるために使用される概念です。OrientDBは、4つのインデックスアルゴリズムとそれぞれのタイプをサポートしています。
インデックスの4つのタイプは次のとおりです。
SBツリーインデックス
他のインデックスタイプから利用できる機能をうまく組み合わせて提供します。これを一般的なユーティリティに使用することをお勧めします。耐久性があり、トランザクションであり、範囲クエリをサポートします。デフォルトのインデックスタイプです。このアルゴリズムをサポートするさまざまなタイプのプラグインは次のとおりです。
UNIQUE−これらのインデックスは重複キーを許可しません。複合インデックスの場合、これは複合キーの一意性を指します。
NOTUNIQUE −これらのインデックスは重複キーを許可します。
FULLTEXT−これらのインデックスは、任意の1単語のテキストに基づいています。あなたはそれらを介してクエリで使用することができますCONTAINSTEXT オペレーター。
DICTIONARY −これらのインデックスは、UNIQUEを使用するインデックスと似ていますが、キーが重複している場合は、既存のレコードが新しいレコードに置き換えられます。
ハッシュインデックス
パフォーマンスが速く、ディスク使用量が非常に少ないです。耐久性があり、トランザクションですが、範囲クエリをサポートしていません。これはHASHMAPのように機能し、時間指定のルックアップで高速になり、他のインデックスタイプよりも少ないリソースを消費します。このアルゴリズムをサポートするさまざまなタイプのプラグインは次のとおりです。
UNIQUE_HASH_INDEX−これらのインデックスは重複キーを許可しません。複合インデックスの場合、これは複合キーの一意性を指します。
NOTUNIQUE_HASH_INDEX −これらのインデックスは重複キーを許可します。
FULLTEXT_HASH_INDEX−これらのインデックスは、任意の1単語のテキストに基づいています。CONTAINSTEXT演算子を使用してクエリで使用できます。
DICTIONARY_HASH_INDEX −これらのインデックスはを使用するものと同様です UNIQUE_HASH_INDEX、ただし、キーが重複している場合は、既存のレコードが新しいレコードに置き換えられます。
Luceneフルテキストインデックス
優れたフルテキストインデックスを提供しますが、他のタイプのインデックスには使用できません。耐久性があり、トランザクションであり、範囲クエリをサポートします。
Lucene Spatial Index
優れた空間インデックスを提供しますが、他のタイプのインデックスには使用できません。耐久性があり、トランザクションであり、範囲クエリをサポートします。
インデックスの作成
Create indexは、特定のスキーマにインデックスを作成するためのコマンドです。
次のステートメントは、インデックスを作成するための基本的な構文です。
CREATE INDEX <name> [ON <class-name> (prop-names)] <type> [<key-type>]
[METADATA {<metadata>}]
上記の構文のオプションの詳細は次のとおりです。
<name>−インデックスの論理名を定義します。<class.property>表記を使用して、スキーマプロパティにバインドされた自動インデックスを作成することもできます。<class>はスキーマのクラスを使用し、<property>はクラスで作成されたプロパティを使用します。
<class-name>−インデックスを作成する自動インデックスを作成しているクラスの名前を提供します。このクラスはデータベースに存在する必要があります。
<prop-names>−自動インデックスにインデックスを付けるプロパティのリストを提供します。これらのプロパティは、スキーマにすでに存在している必要があります。
<type> −作成するインデックスのアルゴリズムとタイプを提供します。
<key-type> −オプションのキータイプに自動インデックスを提供します。
<metadata> −JSON表現を提供します。
例
次のクエリを試して、ユーザー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
RDBMSと同様に、OrientDBはトランザクションACIDプロパティをサポートします。Atransactionデータベース管理システム内で実行される作業単位で構成されます。データベース環境でトランザクションを維持する主な理由は2つあります。
障害からの同時回復を可能にし、システム障害が発生した場合でもデータベースの一貫性を維持するため。
データベースに同時にアクセスするプログラム間の分離を提供するため。
デフォルトでは、データベーストランザクションは、Atomic、Consistent、Isolated、DurableプロパティなどのACIDプロパティに従う必要があります。ただし、OrientDBはACID準拠のデータベースです。つまり、ACIDの概念と矛盾したり否定したりすることはありませんが、NoSQLデータベースの処理中に認識が変わります。ACIDプロパティがNoSQLデータベースとどのように連携するかを見てみましょう。
Atomic −データベースを変更するために何かを行うと、変更は機能するか、全体として失敗するはずです。
Consistent −データベースは一貫性を保つ必要があります。
Isolated −他のトランザクション実行が同時に実行されている場合、ユーザーは同時実行のレコードを表示できません。
Durable −システムがクラッシュした場合(ハードウェアまたはソフトウェア)、データベース自体がバックアップを取ることができるはずです。
データベーストランザクションは、CommitコマンドとRollbackコマンドを使用して実行できます。
コミット
コミットとは、データベースへのすべての変更を保存してトランザクションを閉じることを意味します。ロールバックとは、トランザクションを開いた時点までデータベースの状態を回復することを意味します。
次のステートメントは、COMMITデータベースコマンドの基本的な構文です。
COMMIT
Note −このコマンドは、特定のデータベースに接続した後、トランザクションを開始した後にのみ使用できます。
例
この例では、このチュートリアルの前の章で作成した「demo」という名前の同じデータベースを使用します。コミットトランザクションの操作を確認し、トランザクションを使用してレコードを保存します。
最初に、次のBEGINコマンドを使用してトランザクションを開始する必要があります。
orientdb {db = demo}> BEGIN
次のコマンドを使用して、値id = 12およびname = satish.Pのレコードをemployeeテーブルに挿入します。
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
次のコマンドを使用して、トランザクションをコミットできます。
orientdb> commit
このトランザクションが正常にコミットされると、次の出力が得られます。
Transaction 2 has been committed in 4ms
ロールバック
ロールバックとは、トランザクションを開いた時点までデータベースの状態を回復することを意味します。
次のステートメントは、ROLLBACKデータベースコマンドの基本的な構文です。
ROLLBACK
Note −このコマンドは、特定のデータベースに接続した後、トランザクションを開始した後にのみ使用できます。
例
この例では、チュートリアルの前の章で作成した「demo」という名前の同じデータベースを使用します。ロールバックトランザクションの動作を確認し、トランザクションを使用してレコードを保存します。
最初に、次のBEGINコマンドを使用してトランザクションを開始する必要があります。
orientdb {db = demo}> BEGIN
次のコマンドを使用して、値id = 12およびname = satish.Pのレコードをemployeeテーブルに挿入します。
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
次のコマンドを使用して、テーブルemployeeのレコードを取得できます。
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
このコマンドが正常に実行されると、次の出力が得られます。
---+-------+--------------------
# | ID | name
---+-------+--------------------
0 | 12 | satish.P
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).
次のコマンドを使用して、このトランザクションをロールバックできます。
orientdb> ROLLBACK
selectクエリをもう一度チェックして、Employeeテーブルから同じレコードを取得します。
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
ロールバックが正常に実行されると、出力に0レコードが見つかります。
0 item(s) found. Query executed in 0.037 sec(s).
OrientDB Hooksユーザーアプリケーションの各CRUD操作の前後に内部イベントを有効にするデータベース用語のトリガーに他なりません。フックを使用して、カスタム検証ルールを記述したり、セキュリティを強化したり、リレーショナルDBMSに対する複製などの外部イベントを調整したりできます。
OrientDBは2種類のフックをサポートしています-
Dynamic Hook −トリガー。クラスレベルやドキュメントレベルで作成できます。
Java (Native) Hook −Javaクラスを使用して構築できるトリガー。
ダイナミックフック
動的フックは、実行時に変更でき、必要に応じてドキュメントごとに実行できるため、Javaフックよりも柔軟性がありますが、Javaフックよりも低速です。
ドキュメントに対してフックを実行するには、最初にクラスの拡張を許可します OTriggered基本クラス。後で、関心のあるイベントのカスタムプロパティを定義します。利用可能なイベントは次のとおりです。
onBeforeCreate −呼び出された before 新しいドキュメントを作成します。
onAfterCreate −呼び出された after 新しいドキュメントを作成します。
onBeforeRead −呼び出された before 文書を読む。
onAfterRead −呼び出された after 文書を読む。
onBeforeUpdate −呼び出された before ドキュメントの更新。
onAfterUpdate −呼び出された after ドキュメントの更新。
onBeforeDelete −呼び出された before ドキュメントを削除します。
onAfterDelete −呼び出された after ドキュメントを削除します。
ダイナミックフックは-を呼び出すことができます
SQL、Javascript、またはOrientDBとJVMでサポートされている任意の言語で記述された関数。
Java静的メソッド。
クラスレベルのフック
クラスレベルのフックは、クラスに関連するすべてのドキュメントに対して定義されています。以下は、請求書ドキュメントに対してクラスレベルで機能するフックを設定する例です。
CREATE CLASS Invoice EXTENDS OTriggered
ALTER CLASS Invoice CUSTOM onAfterCreate = invoiceCreated
関数を作成しましょう invoiceCreated 作成された請求書番号をサーバーコンソールに出力するJavascriptで。
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
ドキュメントレベルフック
特別なアクションは、1つ以上のドキュメントに対してのみ定義できます。これを行うには、クラスを拡張できるようにしますOTriggered クラス。
たとえば、プロパティaccount = 'Premium'を持つすべてのドキュメントに対して、既存のProfileクラスに対してJavascript関数としてトリガーを実行してみましょう。ドキュメントの削除を防ぐためにトリガーが呼び出されます。
ALTER CLASS Profile SUPERCLASS OTriggered UPDATE Profile
SET onBeforeDelete = 'preventDeletion' WHERE account = 'Premium'
を作成しましょう preventDeletion() Javascript関数。
CREATE FUNCTION preventDeletion "throw new java.lang.RuntimeException('Cannot
delete Premium profile ' + doc)" LANGUAGE Javascript
次に、「プレミアム」アカウントを削除してフックをテストします。
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フック(トリガー)の一般的な使用例の1つは、一部またはすべてのクラスの作成日と更新日を管理することです。たとえば、次のように設定できます。CreatedDate レコードが作成され、設定されるたびにフィールド UpdatedDate レコードが更新されるたびにフィールドを作成し、データベース層でロジックを一度実装し、アプリケーション層で再度心配する必要がないようにします。
作成する前に、ダウンロードする必要があります orientdb-core.jar次のリンクにアクセスしてファイルをダウンロードします。OrientDBコアをダウンロードします。その後、そのjarファイルをJavaソースファイルを保存するフォルダにコピーします。
フックファイルを作成する
名前の付いたJavaファイルを作成します HookTest.java、Java言語を使用してフックメカニズムをテストします。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
import com.orientechnologies.orient.core.hook.ORecordHook;
import com.orientechnologies.orient.core.hook.ORecordHookAbstract;
import com.orientechnologies.orient.core.db.ODatabaseLifecycleListener;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;
public class HookTest extends ODocumentHookAbstract implements ORecordHook {
public HookTest() {
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.BOTH;
}
public RESULT onRecordBeforeCreate( ODocument iDocument ) {
System.out.println("Ran create hook");
return ORecordHook.RESULT.RECORD_NOT_CHANGED;
}
public RESULT onRecordBeforeUpdate( ODocument iDocument ) {
System.out.println("Ran update hook");
return ORecordHook.RESULT.RECORD_NOT_CHANGED;
}
}
上記のサンプルコードは、そのクラスのレコードを作成または更新するたびに適切なコメントを出力します。
もう1つフックファイルを追加しましょう 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コードをコンパイルします。 Note:ダウンロードしたjarファイルとこれらのJavaファイルを同じフォルダに保存します。
$ jar cf hooks-1.0-SNAPSHOT.jar *.java
コンパイルされたコードをOrientDBサーバーが見つけられる場所に移動する
完成した.jarファイルをOrientDBサーバーが検索するディレクトリにコピーする必要があります。これは 'を意味します./lib'OrientDBサーバーのルートディレクトリの下にあるフォルダは次のようになります-
$ 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の専門家ではないため、このチュートリアルに含まれる情報が、必要に応じてデータベーストリガーを正常に作成できるように、有利なスタートを切り、テクノロジに慣れることができれば幸いです。
Cachingは、データベーステーブル構造のコピーを作成して、ユーザーアプリケーションに快適な環境を提供する概念です。OrientDBには、さまざまなレベルでいくつかのキャッシュメカニズムがあります。
次の図は、キャッシングとは何かについてのアイデアを示しています。
上の図では DB1、 DB2、 DB3 アプリケーションで使用される3つの異なるデータベースインスタンスです。
Level-1 キャッシュは Local cache特定のセッションで認識されているすべてのエンティティを格納します。このセッションに3つのトランザクションがある場合、3つのトランザクションすべてで使用されるすべてのエンティティが保持されます。このキャッシュは、セッションを閉じるとき、または「クリア」メソッドを実行するとクリアされます。これにより、アプリケーションとデータベース間のI / O操作の負担が軽減され、パフォーマンスが向上します。
Level-2 キャッシュは Real cacheこれは、サードパーティのプロバイダーを使用して機能します。キャッシュの内容を完全に制御できます。つまり、削除するエントリ、保存期間を長くするエントリなどを指定できます。これは、複数のスレッド間で完全に共有されるキャッシュです。
Storage model ディスク、メモリ、またはリモートサーバーであるストレージデバイスに他なりません。
OrientDBでキャッシュはどのように機能しますか?
OrientDBキャッシングは、さまざまな環境でさまざまな方法を提供します。キャッシングは主に、データベーストランザクションを高速化し、トランザクションの処理時間を短縮し、パフォーマンスを向上させるために使用されます。次のフロー図は、ローカルモードとクライアントサーバーモードでキャッシュがどのように機能するかを示しています。
ローカルモード(組み込みデータベース)
次のフロー図は、ローカルモードで、つまりデータベースサーバーがローカルホストにある場合に、レコードがストレージと使用されているアプリケーションの間にどのようにあるかを示しています。
クライアントアプリケーションがレコードを要求すると、OrientDBは次のことをチェックします-
トランザクションが開始されている場合は、トランザクション内で変更されたレコードを検索し、見つかった場合はそれを返します。
ローカルキャッシュが有効で、要求されたレコードが含まれている場合は、それを返します。
この時点でレコードがキャッシュにない場合は、ストレージ(ディスク、メモリ)にレコードを要求します。
クライアントサーバーモード(リモートデータベース)
次のフロー図は、クライアントサーバーモードで、つまりデータベースサーバーがリモートロケーションにある場合に、レコードがストレージと使用されているアプリケーションの間にどのようにあるかを示しています。
クライアントアプリケーションがレコードを要求すると、OrientDBは次のことをチェックします-
トランザクションが開始されている場合は、トランザクション内で変更されたレコードを検索し、見つかった場合はそれを返します。
ローカルキャッシュが有効で、要求されたレコードが含まれている場合は、それを返します。
この時点で、レコードがキャッシュにない場合は、TCP / IP呼び出しを介してサーバーにレコードを要求します。
サーバーで、ローカルキャッシュが有効になっていて、要求されたレコードが含まれている場合は、それを返します。
この時点でも、レコードはサーバーにキャッシュされておらず、ストレージ(ディスク、メモリ)に要求されます。
OrientDBは、Java仮想マシンにバンドルされているJavaロギングフレームワークを使用します。OrientDBのデフォルトのログ形式はによって管理されますOLogFormatter クラス。
次のステートメントは、loggingコマンドの基本的な構文です。
<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(最低値)
デフォルトでは、2つのロガーがインストールされています-
Console、アプリケーション/サーバーを起動するシェル/コマンドプロンプトの出力として。変数「log.console.level」を設定することで変更できます。
File、ログファイルへの出力として。'log.file.level'を設定することで変更できます。
ロギングの構成
ロギング戦略とポリシーは、Javaに続くファイルを使用して構成できます。
syntax −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)スクリプト内
システムプロパティを設定する "log.console.level「と」log.file.level"javaの-Dパラメータを使用して必要なレベルに。
$ java -Dlog.console.level = FINE ...
実行時のロギング
以下は、さまざまな方法で起動レベルでログを設定する手順です。
Javaコードを使用する
システム変数は、System.setProperty()APIを使用して起動時に設定できます。次のコードスニペットは、Javaコードを使用してロギングレベルを設定するための構文です。
public void main(String[] args){
System.setProperty("log.console.level", "FINE");
...
}
リモートサーバー上
次のURLに対してHTTPPOSTを実行します:/ server / log。<type> / <level>、ここで-
- <type>は「console」または「file」にすることができます
- <level>はサポートされているレベルの1つです
例
次の例では、 cURLOrientDBサーバーに対してHTTPPOSTコマンドを実行します。サーバーの「root」ユーザーとパスワードが使用されました。自分のパスワードに置き換えてください。
コンソールへの最高のトレースレベルを有効にする-
curl -u root:root -X POST http://localhost:2480/server/log.console/FINEST
ファイルへの最高のトレースレベルを有効にする-
curl -u root:root -X POST http://localhost:2480/server/log.file/FINEST
この章では、OrientDBを使用するアプリケーションを最適化する方法に関する一般的なヒントをいくつか紹介します。さまざまなタイプのデータベースのパフォーマンスを向上させる方法は3つあります。
Document Database Performance Tuning −新しいドキュメントごとにドキュメントが作成されないようにする手法を使用します。
Object Database Performance Tuning −一般的な手法を使用してパフォーマンスを向上させます。
Distributed Configuration Tuning −分散構成のパフォーマンスを向上させるために、さまざまな方法を使用します。
メモリ、JVM、およびリモート接続の設定を変更することで、一般的なパフォーマンスチューニングを実現できます。
メモリ設定
パフォーマンスを向上させるためのメモリ設定にはさまざまな戦略があります。
サーバーと組み込みの設定
これらの設定は、サーバーコンポーネントと、Javaアプリケーションが組み込みモードでOrientDBを使用して実行されるJVMの両方に有効です。 plocal。
チューニングで最も重要なことは、メモリ設定が正しいことを確認することです。本当の違いを生むことができるのは、特にインメモリキャッシュ構造が生のIOよりも少ない大規模なデータセット(GB、TBなど)で、メモリマッピングによって使用されるヒープと仮想メモリの間の適切なバランスです。
たとえば、Javaプロセスに最大8 GBを割り当てることができる場合は、通常、小さいヒープと大きいディスクキャッシュバッファ(オフヒープメモリ)を割り当てる方が適切です。
次のコマンドを試して、ヒープメモリを増やしてください。
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
ザ・ storage.diskCache.bufferSize 設定(古い「ローカル」ストレージでは file.mmap.maxMemory)はMB単位であり、ディスクキャッシュコンポーネントに使用するメモリの量を示します。デフォルトでは4GBです。
NOTE −最大ヒープとディスクキャッシュバッファの合計が高すぎると、OSがスワップして大幅に遅くなる可能性があります。
JVM設定
JVM設定は、server.sh(およびserver.bat)バッチファイルにエンコードされます。それらを変更して、使用法とハードウェア/ソフトウェア設定に応じて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を大多数のノードに設定している場合は、 readQuorum1(デフォルト)。これにより、すべての読み取りが高速化されます。
アップグレードするときは、バージョン番号と形式を考慮する必要があります。フォーマットには、MAJOR、MINOR、PATCHの3種類があります。
MAJOR バージョンには、互換性のないAPIの変更が伴います。
MINOR バージョンには、下位互換性のある機能が含まれます。
PTCH バージョンには、下位互換性のあるバグ修正が含まれます。
マイナーバージョンとメジャーバージョンを同期するには、データベースのエクスポートとインポートが必要になる場合があります。多くの場合、データベースをLOCALからPLOCALに移行し、グラフをRidBagに移行する必要があります。
LOCALストレージエンジンからPLOCALに移行します
バージョン1.5.x以降、OrientDBには新しいストレージエンジンPLOCAL(Paginated LOCAL)が付属しています。LOCALのように永続的ですが、情報を別の方法で格納します。以下の点は、PLOCALとLOCALの比較を示しています。
PLOCALでは、レコードはクラスターファイルに保存されますが、LOCALではクラスターとデータセグメントに分割されます。
PLOCALは、append-on-writeモードのため、LOCALよりも耐久性があります。
PLOCALには、書き込みに対するマイナーな競合ロックがあります。これは、より多くの同時実行性を意味します。
PLOCALはメモリマッピング技術(MMap)を使用しないため、動作はより「予測可能」です。
ローカルストレージを新しいPLOCALに移行するには、ストレージエンジンとしてPLOCALを使用してデータベースをエクスポートおよび再インポートする必要があります。手順は次のとおりです。
Step 1 −新しいシェル(Linux / Mac)またはコマンドプロンプト(Windows)を開きます。
Step 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
Step 3 −ローカルファイルシステムで、「plocal」エンジンを使用して新しいデータベースを作成します−
orientdb> CREATE DATABASE plocal:/temp/newdb admin admin plocal graph
Step 4 −古いデータベースを新しいデータベースにインポートします。
orientdb> IMPORT DATABASE /temp/demo.json.gzip -preserveClusterIDs=true
orientdb> QUIT
同じJVMでデータベースにアクセスする場合は、URLを「local:」から「plocal:」に変更することを忘れないでください。
グラフをRidBagに移行する
OrientDB 1.7以降、RidBagは、グラフの隣接関係を管理するデフォルトのコレクションです。MVRB-Treeによって管理される古いデータベースは完全に互換性がありますが、データベースをより新しい形式に更新できます。
コンソールまたはを使用してグラフをアップグレードできます。 ORidBagMigration クラス。
データベースに接続するCONNECT plocal:databases/<graphdb-name>
アップグレードグラフコマンドを実行する
RDBMSと同様に、OrientDBも、よく知られた概念、ユーザー、および役割に基づいたセキュリティを提供します。各データベースには独自のユーザーがあり、各ユーザーには1つ以上の役割があります。役割は、作業モードと一連の権限の組み合わせです。
ユーザー
デフォルトでは、OrientDBはサーバー内のすべてのデータベースに対して3つの異なるユーザーを維持します-
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コマンドを使用します。その際、ステータスをアクティブに設定し、有効な役割を与える必要があることを忘れないでください。
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に切り替えます。たとえば、adminを除くすべてのユーザーを無効にする場合は、次のコマンドを使用します-
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で指定された2つのタイプがあります。
Allow All But (Rules)−デフォルトでは、スーパーユーザーモードです。ルールを使用して、これに対する例外を指定します。OrientDBが要求されたリソースのルールを見つけられない場合、ユーザーは操作を実行できます。このモードは、主にパワーユーザーと管理者に使用します。デフォルトのロールadminは、デフォルトでこのモードを使用し、例外ルールはありません。データベースには1として書き込まれます。
Deny All But (Rules)−デフォルトでは、このモードでは何も許可されません。ルールを使用して、これに対する例外を指定します。OrientDBが要求されたリソースのルールを見つけると、ユーザーは操作を実行できます。このモードをすべてのクラシックユーザーのデフォルトとして使用します。デフォルトの役割であるリーダーとライターは、このモードを使用します。データベースには0として書き込まれます。
OrientDBは、GUIを介してデータベース操作を実行するためのWebUIを提供します。この章では、OrientDBで使用できるさまざまなオプションについて説明します。
スタジオホームページ
Studioは、OrientDBディストリビューションにバンドルされているOrientDBを管理するためのWebインターフェイスです。
まず、次のコマンドを使用してOrientDBサーバーを起動する必要があります。
$ server.sh
マシンでOrientDBを実行している場合は、URL-を介してWebインターフェイスにアクセスできます。
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 / memory)
- サーバーユーザー
- サーバーパスワード
サーバーの資格情報は、 $ORIENTDB_HOME/config/orientdbserver-config.xml ファイル。
<users>
<user name = "root" password = "pwd" resources = "*" />
</users>
作成されると、Studioは自動的に新しいデータベースにログインします。
クエリを実行する
Studioは、サポートされている言語(SQLとGremlin)の間で使用している言語の自動認識をサポートしています。書き込み中に、を押してオートコンプリート機能を使用しますCtrl + Space。
次のショートカットはクエリエディタで使用できます-
Ctrl + Return −クエリを実行するには、またはクリックするだけです Run ボタン。
Ctrl/Cmd + Z −変更を元に戻す。
Ctrl/Cmd + Shift + Z −変更をやり直す。
Ctrl/Cmd + F −エディターで検索します。
Ctrl/Cmd + / −コメントを切り替える。
次のスクリーンショットは、クエリを実行する方法を示しています。
いずれかをクリックして @rid 結果セットの値。レコードがドキュメントの場合はドキュメント編集モードになり、それ以外の場合は頂点編集になります。
結果セットまたはエディターで星のアイコンをクリックすると、クエリをブックマークできます。ブックマークされたクエリを参照するには、Bookmarksボタン。Studioは左側のブックマークリストを開き、クエリを編集/削除または再実行できます。
Studioは、実行されたクエリをブラウザのローカルストレージに保存します。クエリ設定では、Studioが履歴に保持するクエリの数を構成できます。以前に実行したクエリを検索したり、履歴からすべてのクエリを削除したり、1つのクエリを削除したりすることもできます。
頂点を編集する
グラフの頂点を編集するには、[グラフ]セクションに移動します。次に、次のクエリを実行します。
Select From Customer
クエリを正常に実行すると、次のスクリーンショットが出力されます。編集するグラフキャンバスで特定の頂点を選択します。
特定の頂点の編集記号を選択します。頂点を編集するためのオプションを含む次の画面が表示されます。
スキーママネージャー
OrientDBは、スキーマレスモード、スキーマモード、またはその両方の組み合わせで動作できます。ここでは、スキーマモードについて説明します。WebUIの上部にある[スキーマ]セクションをクリックします。次のスクリーンショットが表示されます。
新しいクラスを作成する
新しいクラスを作成するには、をクリックするだけです。 New Classボタン。次のスクリーンショットが表示されます。新しいクラスを作成するには、スクリーンショットに示すように次の情報を提供する必要があります。
すべてのインデックスを表示
データベースに作成されたすべてのインデックスの概要を知りたい場合は、スキーマUIの[すべてのインデックス]ボタンをクリックするだけです。これにより、インデックスに関するいくつかの情報(名前、タイプ、プロパティなど)にすばやくアクセスでき、ここからインデックスを削除または再構築できます。
クラスの編集
スキーマセクションの任意のクラスをクリックすると、次のスクリーンショットが表示されます。
クラスの編集中に、プロパティを追加したり、新しいインデックスを追加したりできます。
プロパティを追加する
[新しいプロパティ]ボタンをクリックして、プロパティを追加します。次のスクリーンショットが表示されます。
プロパティを追加するには、スクリーンショットに示されているように、次の詳細を提供する必要があります。
インデックスを追加する
[新しいインデックス]ボタンをクリックします。次のスクリーンショットが表示されます。インデックスを追加するには、スクリーンショットに示されているように、次の詳細を提供する必要があります。
グラフエディタ
グラフセクションをクリックします。データをグラフスタイルで視覚化できるだけでなく、グラフを操作して変更することもできます。
グラフ領域にデータを入力するには、クエリエディタにクエリを入力するか、参照UIの[グラフに送信]機能を使用します。
頂点を追加する
グラフデータベースとグラフキャンバス領域に新しい頂点を追加するには、ボタンを押す必要があります Add Vertex。この操作は2つのステップで実行されます。
最初のステップでは、新しい頂点のクラスを選択してから、[次へ]をクリックする必要があります。
2番目のステップでは、新しい頂点のフィールド値を挿入する必要があります。OrientDBはスキーマレスモードをサポートしているため、カスタムフィールドを追加することもできます。新しい頂点を永続化するには、[変更を保存]をクリックすると、頂点がデータベースに保存され、キャンバス領域に追加されます。
頂点を削除する
削除する頂点をクリックして、円形メニューを開きます。マウスをメニューエントリmore(...)に合わせてサブメニューを開き、ごみ箱アイコンをクリックします。
キャンバスから頂点を削除する
円形メニューを開き、メニューエントリmore(...)にマウスを合わせてサブメニューを開き、消しゴムアイコンをクリックします。
頂点を検査する
Vertexプロパティを簡単に確認したい場合は、目のアイコンをクリックしてください。
セキュリティ
Studio 2.0には、ユーザーとロールをグラフィカルな方法で管理できる新しいセキュリティ管理が含まれています。
ユーザー
次のアクションを実行して、データベースユーザーを管理できます-
- ユーザーの検索
- ユーザーの追加
- ユーザーを削除する
- ユーザーの編集:役割はインラインで編集できます。名前、ステータス、パスワードについては、 Edit ボタン
ユーザーの追加
新しいユーザーを追加するには、 Add User ボタンをクリックして、新しいユーザーの情報(名前、パスワード、ステータス、役割)を入力し、保存して新しいユーザーをデータベースに追加します。
役割
次のアクションを実行して、データベースの役割を管理できます-
- 検索の役割
- 役割を追加
- 役割の削除
- 役割の編集
役割を追加
新しいユーザーを追加するには、 Add Role ボタンをクリックし、新しいロールの情報(名前、親ロール、モード)を入力してから保存して、新しいロールをデータベースに追加します。
ロールにルールを追加する
選択した役割に新しいセキュリティルールを追加するには、[ Add Ruleボタン。これにより、保護するリソースの文字列が尋ねられます。次に、新しく作成されたリソースに対するCRUD権限を構成できます。
RDBMSと同様に、OrientDBはJDBCをサポートします。このために、最初にJDBCプログラミング用の環境を構成する必要があります。以下は、アプリケーションとデータベース間の接続を作成する手順です。
まず、JDBCドライバーをダウンロードする必要があります。次のリンクにアクセスしてくださいhttps://code.google.com/archive/p/orient/downloads OrientDB-JDBCをダウンロードします。
以下は、OrientDB-jdbc接続を実現するための基本的な5つのステップです。
- JDBCドライバーをロードします
- 接続を作成する
- ステートメントを作成する
- ステートメントを実行する
- 接続を閉じる
例
次の例を試して、OrientDB-JDBC接続を理解してください。次のフィールドとそのタイプを含むemployeeテーブルがあるとします。
シニア番号 | フィールド名 | タイプ |
---|---|---|
1 | Id | 整数 |
2 | 名前 | ストリング |
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
すべてのコマンドを実行すると、次のフィールドを持つEmployeeテーブル、idを持つ従業員名、age、およびjoin_dateフィールドが取得されます。
次のコードをに保存します 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
Python用のOrientDBドライバーは、バイナリプロトコルを使用します。PyOrientは、OrientDBをPythonに接続するのに役立つgitハブプロジェクト名です。OrientDBバージョン1.7以降で動作します。
次のコマンドを使用して、PyOrientをインストールします。
pip install pyorient
次の名前のスクリプトファイルを使用できます demo.py 次のタスクを実行するには-
クライアントインスタンスを作成するということは、接続を作成することを意味します。
名前の付いたDBを作成します DB_Demo。
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