ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由:
Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章


データベースの世界では、データを格納するための標準的な選択肢は、従来、リレーショナルデータベース管理システム(略してRDBMS)でした。 MySQL、PostgreSQL、MariaDBなどのリレーショナルシステムは強力で、状況によっては最適な選択ですが、必ずしも適切であるとは限りません。

最近、NoSQLデータベースと呼ばれることが多い非リレーショナルデータベースの人気が急上昇しています。 これらは多くの場合、軽量で制限が少なく、優れたスケーリングが可能です。 MongoDB、Riak、Cassandraなどの一般的な例では、軽量のKey-Valueストア、列セクションを使用して、または柔軟なドキュメントとしてデータを保存します。

あまり一般的ではない戦略は、オブジェクト間の軽量の線やポインタとの関係を形成するグラフデータベースです。 OrientDB はハイブリッドデータベースであり、ドキュメントまたはグラフデータベースのように動作できます。 これは非常に柔軟性があり、非常に効率的ですが複雑な相互作用をもたらす可能性があります。

このガイドでは、Ubuntu12.04システムにOrientDBの基本的な使用法のいくつかをインストールして調査します。

OrientDBをインストールします


OrientDBはUbuntuのデフォルトのリポジトリからは利用できないため、プロジェクトのGitHubページから取得する必要があります。 ただし、その前に、いくつかの前提条件ソフトウェアをインストールする必要があります。

sudo apt-get update
sudo apt-get install openjdk-7-jdk git ant

そのプロセスが完了すると、GitHubページから最新のスナップショットのクローンを作成できます。 これは、ホームディレクトリで行います。

cd
git clone https://github.com/orientechnologies/orientdb.git

これにより、ホームディレクトリに「orientdb」というディレクトリが作成されます。 このディレクトリに入り、インストールしたApacheantツールを使用してソフトウェアをビルドします。

cd orientdb
ant clean install

OrientDBの構築が完了すると、ホームディレクトリの下に「releases」という新しいディレクトリが作成されます。 この下のデータベースシステムは、バージョン管理されたフォルダーにあります。

cd ../releases/orientdb*

binディレクトリに移動し、次のように入力してサーバーを起動します。

cd bin
./server.sh &

これにより、システム上のサーバーの実行がバックグラウンドで開始されます。 サーバーインスタンスを強制終了する必要がある場合は、psを使用してpidを検索してから、プロセスを強制終了できます。

ps aux | grep server.sh | grep -v grep | awk '{ print $2; }' | xargs kill

起動すると、サーバーは、使用するプロトコルに応じて使用できる2つの別々のポートを公開します。

  • 2424 :このポートは開かれ、データベースへのバイナリアクセスに使用されます。 これは、ネットワークバイナリプロトコルで動作するクライアントとドライバー、またはデータベースコンソールを使用して、このポートを介してデータベースと対話できることを意味します。
  • 2480 :このポートは開かれ、RESTfulAPIを介したHTTPインタラクションに使用されます。 ブラウザでこのポートにアクセスすると、サーバーのWebツールにアクセスできます。

データベースに接続する


ターミナルで開始したデータベースに接続して、OrientDBの動作について学習します。

これは、サーバーを起動したのと同じ「bin」ディレクトリから実行できますが、最初に、データベースに接続できるようにデフォルトのパスワードを取得する必要があります。

nano ../config/orientdb-server-config.xml

このファイルで、「ユーザー」セクションを検索します。 「root」という名前が関連付けられたエントリが表示されます。 非常に長いパスワードもあります。 このパスワードを一時的に貼り付けることができる場所にコピーします。

情報を入手したら、ファイルを閉じます。

binディレクトリで、次のように入力してOrientDBコンソールを起動します。

./console.sh

OrientDBプロンプトが表示され、ソフトウェアを操作できます。

まず、起動したサーバーインスタンスに接続する必要があります。 これを行うには、次のように入力します。

remote:localhostrootcopyed_pa sswordに接続します

データベースを一覧表示して、サーバーが使用可能かどうかをテストできます。

list databases

成功すると、OrientDBのサンプルデータベースとして使用されるGratefulDeadConcertsデータベースが表示されます。 そうでない場合は、次の警告が表示されます。

Not connected to the Server instance. You've to connect to the Server using server's credentials (look at orientdb-*server-config.xml file)

これでサーバーに接続し、サーバーにコマンドを与える準備ができました。

サーバー接続と同様の構文を使用して、データベースに接続します。 このデータベースには、adminのユーザーとadminのパスワードもあります。

connect remote:localhost/GratefulDeadConcerts admin admin

クラス、クラスター、グラフ、およびドキュメント


OrientDBは、さまざまな階層レベルでさまざまなカテゴリを使用して情報を整理します。

ハイブリッド設計のため、OrientDBはレコードをドキュメントまたはグラフに整理できます。 Documents は、ほとんどの場合、他のNoSQLシステムと同じです。 これらは、事前定義されたフィールドのセットがない単純な情報のチャンクであり、必要に応じて変更およびモーフィングできます。

グラフは、データを別の方法で整理する別の形式のストレージです。 グラフは、データのさまざまなポイント間の関係パターンを形成するのに役立ちます。 データの各ポイントは頂点と呼ばれ、各関係はエッジと呼ばれます。 基本的に、これは、異なる別個のオブジェクト間の接続を追跡および検索するために使用できる関係を説明するラベル付きの単なるリンクです。

OrientDBは、オブジェクト指向プログラミング言語から借用して、ドキュメントをクラスに編成します。 OrientDBのclassは、特定の制約とルールを使用してデータのセットを整理する方法です。 基本的には、広い意味でのドキュメント形式を定義します。

cluster は、レコードのグループを整理された方法で保存する方法です。 これは、リレーショナルデータベースのテーブルに似ています。 クラスターにはさまざまなタイプのドキュメントが含まれている可能性があるため、クラスターをデータのプールと考える方が簡単です。

通常、デフォルトでは、OrientDBはクラスごとに1つのクラスターを作成し、そのクラスのすべてのドキュメントをその単一のクラスターに格納します。 ただし、ここには柔軟性があり、2つの関連するクラスのドキュメントをまとめてクラスターグループにすることも、1つのクラスにサービスを提供する2つの別々のクラスターを作成することもできます。

ドキュメントの操作


OrientDBがドキュメントをどのように処理するかを調べることから始めます。これは、ほとんどの人にとってデータを整理するためのより身近な方法である可能性があるためです。

ただし、ドキュメント自体から始めるのではなく、クラスとクラスターの構造を調べてドキュメントに到達し、ディスカッションのコンテキストを確保します。

次のように入力すると、既存のクラスを確認できます。

classes

CLASSES:
----------------------------------------------+------------------------------------+------------+----------------+
 NAME                                         | SUPERCLASS                         | CLUSTERS   | RECORDS        |
----------------------------------------------+------------------------------------+------------+----------------+
 E                                            |                                    | 10         |              0 |
 Eat                                          | E                                  | 14         |              0 |
 Friend                                       | E                                  | 15         |              0 |
. . .

あなたは多くの異なるクラスを見ることができます。 「O」が前に付いているのは、データベースとシステム自体に関する情報を取得するために使用できるOrientDB内部クラスです。 その他の重要なクラスは、頂点を意味する「V」クラスと、グラフ機能に使用されるエッジを意味する「E」です。

次のように入力して、新しいクラスを作成できます。

クラスNew_classを作成します

次に、次のように入力して、ドキュメントにフィールドを追加できます。

プロパティNew_classを作成します。  field_name data_type

たとえば、「野菜」というクラスを作成し、いくつかの重要なプロパティの定義を開始したい場合は、次のように入力できます。

create class Vegetable
create property Vegetable.name string
create property Vegetable.color string
create property Vegetable.quantity integer
create property Vegetable.good_on_pizza boolean

次のように入力すると、Vegetableクラスに関連付けられているプロパティなどの情報を確認できます。

info class Vegetable

クラスのメンバーを表示するには、ブラウズを使用できます。 次の構文を使用できます。

クラスclass_nameを参照

同様に、次のように入力するだけでクラスターを表示できます。

clusters

ご覧のとおり、このリストは、OrientDBがデフォルトで新しいクラスごとにクラスターを作成するため、クラスリストとほとんど同じです。 クラスとクラスターに違いがある場合は、クラスターごとに参照することもできます。

クラスタcluster_nameを参照します

ブラウジングで詳細が必要なレコードを見つけたら、そのRecordIDを参照して表示できます。

システムに保存されている各レコードには、独自のRecordIDがあります。 この値は、データが保存されているクラスターと、それに続くデータが保存されている連続したアイテム番号です。 たとえば、クラスター9の最初のレコードにはrecordID#9:0が与えられます。 2番目には#9:1のrecordIDが与えられます。

次の構文を使用してレコードを表示できます。

レコードrecord_numberを表示します

これは、最新のブラウジング操作が何であれ参照するため、完全なrecordIDを使用せず、シーケンスを示す最後の番号のみを使用します。

レコードをロードするには、次のように入力します。

レコードrecordIDをロードします

この場合、完全なレコード番号を指定する必要があります。

SQL構文を使用したドキュメントの操作


リレーショナルデータベースとほぼ同じ方法でドキュメントを操作できます。 これは、一般的なデータベースの相互作用の学習曲線を減らすための設計上の選択として実装されました。

たとえば、データをクエリするには、selectステートメントを使用できます。 レコード全体を取得する場合は、ワイルドカードは必要ありません。

class_nameから選択

代わりにクラスターから選択するには、次を使用できます。

クラスタから選択: cluster_name

もう1つのオプションは、recordIDから選択することです。

recordIDから選択

「where」と「order」を使用して、データを制約およびソートできます。

select from OIdentity where name = 'admin' order by rules

データをクエリする方法は他にもたくさんありますが、そのほとんどはSQL構文に従います。

グラフの操作


レコードを処理する一般的ではない方法ですが、OrientDBに多くの柔軟性を追加する方法は、グラフのリレーショナル動作です。

OrientDBは、グラフコンテキストでレコードを作成できます。 データのポイントを頂点として配置します。 これらは「エッジ」を介して接続できる独立したデータであり、2つの無関係な部分の間の接続を描画する基本的なポインターです。

「V」と呼ばれるデフォルトの頂点クラスを拡張することにより、頂点クラスを作成できます。

create class Animal extends V

これにより、Animalというクラスが作成されます。 このクラスの各メンバーは、クラスの他のメンバー、または他の頂点クラスの他のメンバーに接続できるポイントを表します。

いくつかのつながりを描くことができるように、食べ物のクラスと環境のクラスを作成しましょう。

create class Food extends V
create class Environment extends V

これで、3つの頂点クラスができました。 また、いくつかの関係を作成する必要があります。 これらの関係はエッジと呼ばれ、基本的に2つの部分がどのように関連しているかを示します。

create class Eat extends E
create class Live extends E

それぞれにメンバーを作成しましょう:

create vertex Animal set name = 'Rabbit'
create vertex Food set name = 'Carrot'
create vertex Environment set name = 'Forest'

次に、これらのデータポイントにエッジを適用して、関係を作成する必要があります。

create edge Eat from (select from Animal where name = 'Rabbit') to (select from Food where name = 'Carrot')

それぞれにレコードが1つしかないため、実際にはwhere句を省略できます。

create edge Live from (select from Animal) to (select from Environment)

これらのエッジ接続は、接続されたレコードを指す「入力」および「出力」ラインを作成します。 たとえば、私たちのウサギには、他の部分(食物と環境)に接続する2つの「アウト」ラインがあります。

他の2つの部分にはそれぞれ、別の要素からこれらの要素への関係があることを指定する「in」接続があります。

これらの関係は、標準の選択クエリとexpandと呼ばれる関数の組み合わせを使用して調べることができます。この関数は、より詳細な情報を提供できます。 イン接続、アウト接続、またはその両方を指定できます。

select expand( out() ) from Animal

----+-----+------+------+-------
#   |@RID |name  |in_Eat|in_Live

----+-----+------+------+-------
0   |#18:0|Carrot|#17:0 |null   
1   |#19:0|Forest|null  |#17:0  

----+-----+------+------+-------

これらを使用して、さまざまなデータ間の関係を説明する複雑なWebを形成できます。 従来のリレーショナル手段とは対照的に、エッジとリンクを使用してこれらの接続を行うことの利点は、関連データを返すことがはるかに高速で安価になることです。

クエリに大きなオーバーヘッドを追加することなく、さまざまな接続を作成できます。

結論


これで、OrientDBデータベースシステムを操作する方法についての良いアイデアが得られたはずです。 ご覧のとおり、さまざまなシステムの多くの要素がブレンドされています。 従来のNoSQLドキュメントストレージを活用しながら、SQL selectクエリ構文を維持し、グラフのリレーショナル動作を構築します。

これは、OrientDBがデータを操作する方法のいくつかを紹介することを目的とした簡単な紹介にすぎません。 プロジェクトのドキュメントは、この紹介を基に構築するための優れたリソースです。

ジャスティン・エリングウッド