OrientDB Java APIの紹介
1. 概要
2. インストール
まず、バイナリパッケージをインストールする必要があります。
次に、解凍してコンテンツを便利なディレクトリに移動する必要があります(ORIENTDB_HOMEを使用)。 コマンドラインで簡単に使用できるように、必ずbinフォルダーを環境変数に追加してください。
最後に、[.s1]#ORIENTDB_DIR #and also the system user we’d like to use instead of USER_YOU_WANT_ORIENTDB_RUN_WITH.の代わりにOrientDBディレクトリの場所(ORIENTDB_HOME)を入力して、$ORIENTDB_HOME/binにあるorientdb.shファイルを編集する必要があります。
これで、完全に機能するOrientDBができました。 orientdb.sh <option> script with optionsを使用できます:
-
start:サーバーを起動します
-
status:ステータスを確認する
-
stop:サーバーを停止します
startアクションとstopアクションの両方で、ユーザーパスワード(orientdb.shファイルで設定したもの)が必要であることに注意してください。
サーバーが起動されると、サーバーはポート2480を占有します。 したがって、このURL:を使用してローカルにアクセスできます
手動インストールの詳細については、here.を参照してください。
注:OrientDBには、Javaバージョン1.7以降が必要です。
以前のバージョンはhereで利用できます。
3. OrientDB JavaAPIのセットアップ
OrientDBを使用すると、Java開発者は次のような3つの異なるAPIを使用できます。
-
グラフAPI –グラフデータベース
-
ドキュメントAPI –ドキュメント指向データベース
-
オブジェクトAPI – OrientDBドキュメントに直接バインドされているオブジェクト
OrientDBを統合して使用するだけで、単一のコードベース内でこれらすべてのタイプを使用できます。
プロジェクトのクラスパスに含めることができるいくつかの利用可能なjarを見てみましょう。
-
orientdb-core-*.jar:コアライブラリをもたらします
-
blueprints-core-*.jar:アダプタのコアコンポーネントを移動します
-
orientdb-graphdb-*.jar:グラフデータベースAPIを提供します
-
orientdb-object-*.jar:オブジェクトデータベースAPIを提供します。
-
orientdb-distributed-*.jar:サーバークラスターで動作する分散データベースプラグインを提供します
-
orientdb-tools-*.jar:コンソールコマンドを渡します。
-
orientdb-client-*.jar:リモートクライアントを提供します
-
orientdb-enterprise-*.jar:クライアントとサーバーが共有するプロトコルとネットワーククラスを有効にします
最後の2つは、リモートサーバーでデータを管理している場合にのみ必要です。
Mavenプロジェクトから始めて、次の依存関係を使用しましょう。
com.orientechnologies
orientdb-core
2.2.31
com.orientechnologies
orientdb-graphdb
2.2.31
com.orientechnologies
orientdb-object
2.2.31
com.tinkerpop.blueprints
blueprints-core
2.6.0
OrientDBのCore、GraphDB、Object API、およびBlueprints-Coreの最新バージョンについては、MavenCentralリポジトリを確認してください。
4. 使用法
OrientDBは、グラフの操作にTinkerPop Blueprints実装を使用しています。
TinkerPopは、グラフデータベースを構築する多くの方法を提供するグラフコンピューティングフレームワークであり、それぞれに実装があります。
さらに、OrientDBでは、APIのタイプに関係なく、3種類のSchemasを操作できます。
-
Schema-Full-厳密モードが有効になっているため、クラスの作成中にすべてのフィールドが指定されます
-
Schema-Less –クラスは特定のプロパティなしで作成されるため、必要に応じて追加できます。 it’s the default mode
-
Schema-Hybrid –スキーマフルとスキーマレスの組み合わせで、事前定義されたフィールドを持つクラスを作成できますが、レコードで他のカスタムフィールドを定義できます
4.1. グラフAPI
最初のステップとして、UIを使用して、ユーザーadminとパスワードadmin.でexampleDBというグラフデータベースを作成しましょう。
次の画像に示されているように、データベースタイプとしてgraphが選択されているため、そのデータはGRAPH Tabでアクセスできます。
ORIENTDB_HOMEがOrientDBのインストールフォルダに対応する環境変数であることを知って、目的のデータベースに接続しましょう。
@BeforeClass
public static void setup() {
String orientDBFolder = System.getenv("ORIENTDB_HOME");
graph = new OrientGraphNoTx("plocal:" + orientDBFolder +
"/databases/exampleDB", "admin", "admin");
}
フィールドに検証を追加する方法を示しながら、Article、Author、およびEditorクラスを開始しましょう。
@BeforeClass
public static void init() {
graph.createVertexType("Article");
OrientVertexType writerType
= graph.createVertexType("Writer");
writerType.setStrictMode(true);
writerType.createProperty("firstName", OType.STRING);
// ...
OrientVertexType authorType
= graph.createVertexType("Author", "Writer");
authorType.createProperty("level", OType.INTEGER).setMax("3");
OrientVertexType editorType
= graph.createVertexType("Editor", "Writer");
editorType.createProperty("level", OType.INTEGER).setMin("3");
Vertex vEditor = graph.addVertex("class:Editor");
vEditor.setProperty("firstName", "Maxim");
// ...
Vertex vAuthor = graph.addVertex("class:Author");
vAuthor.setProperty("firstName", "Jerome");
// ...
Vertex vArticle = graph.addVertex("class:Article");
vArticle.setProperty("title", "Introduction to ...");
// ...
graph.addEdge(null, vAuthor, vEditor, "has");
graph.addEdge(null, vAuthor, vArticle, "wrote");
}
上記のコードスニペットでは、単純なデータベースの単純な表現を作成しました。
-
Articleは、記事を含むスキーマのないクラスです。
-
Writerは、必要なライター情報を保持するスキーマフルスーパークラスです。
-
Writerは、その詳細を保持するAuthorのサブタイプです。
-
Editorは、エディターの詳細を保持するスキーマのないWriterのサブタイプです。
-
lastNameフィールドは保存された作成者に入力されていませんが、次のグラフに表示されます
-
すべてのクラス間に関係があります。AuthorはArticleを書き込むことができ、Editorが必要です。
-
Vertexは、いくつかのフィールドを持つエンティティを表します
-
Edgeは、2つのVerticesをリンクするエンティティです。
フルクラスのオブジェクトに別のプロパティを追加しようとすると、OValidationExceptionになってしまうことに注意してください。
OrientDB studioを使用してデータベースに接続すると、データのグラフ表現が表示されます。
データベースのすべてのレコード(頂点)の数を取得する方法を見てみましょう。
long size = graph.countVertices();
それでは、Writer (Author & Editor)オブジェクトの数だけを表示しましょう。
@Test
public void givenexampleDB_checkWeHaveTwoWriters() {
long size = graph.countVertices("Writer");
assertEquals(2, size);
}
次のステップでは、次のステートメントを使用して、すべてのWriterのデータを見つけることができます。
Iterable writers = graph.getVerticesOfClass("Writer");
最後に、level 7を使用してすべてのEditorをクエリします。ここでは、一致するものが1つだけあります。
@Test
public void givenexampleDB_getEditorWithLevelSeven() {
String onlyEditor = "";
for(Vertex v : graph.getVertices("Editor.level", 7)) {
onlyEditor = v.getProperty("firstName").toString();
}
assertEquals("Maxim", onlyEditor);
}
クラス名は、要求時に特定の頂点を探すために常に指定されます。 詳細はhereで確認できます。
4.2. ドキュメントAPI
次のオプションは、OrientDBのドキュメントモデルを使用することです。 これにより、タイプがテキスト、画像、またはバイナリフォームの可能性があるフィールドに格納された情報を持つ単純なレコードを介してデータ操作が公開されます。
もう一度UIを使用して、exampleDBTwoという名前のデータベースを作成しましょう。ただし、タイプとしてdocumentを使用します。
注:同様に、このAPIは、スキーマフルモード、スキーマレスモード、またはスキーマハイブリッドモードのいずれでも使用できます。
ODatabaseDocumentTxオブジェクトをインスタンス化し、データベースURLとデータベースユーザーの資格情報を提供するだけでよいため、データベース接続は単純なままです。
@BeforeClass
public static void setup() {
String orientDBFolder = System.getenv("ORIENTDB_HOME");
db = new ODatabaseDocumentTx("plocal:"
+ orientDBFolder + "/databases/exampleDBTwo")
.open("admin", "admin");
}
Author情報を保持する簡単なドキュメントを保存することから始めましょう。
ここで、クラスが自動的に作成されたことがわかります。
@Test
public void givenDB_whenSavingDocument_thenClassIsAutoCreated() {
ODocument doc = new ODocument("Author");
doc.field("name", "Paul");
doc.save();
assertEquals("Author", doc.getSchemaClass().getName());
}
したがって、Authorsの数を数えるには、次を使用できます。
long size = db.countClass("Author");
フィールド値を使用してドキュメントを再度クエリし、level 7でAuthorのオブジェクトを検索してみましょう。
@Test
public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven() {
for (ODocument author : db.browseClass("Author")) author.delete();
ODocument authorOne = new ODocument("Author");
authorOne.field("firstName", "Leo");
authorOne.field("level", 7);
authorOne.save();
ODocument authorTwo = new ODocument("Author");
authorTwo.field("firstName", "Lucien");
authorTwo.field("level", 9);
authorTwo.save();
List result = db.query(
new OSQLSynchQuery("select * from Author where level = 7"));
assertEquals(1, result.size());
}
同様に、Authorクラスのすべてのレコードを削除するには、次を使用できます。
for (ODocument author : db.browseClass("Author")) {
author.delete();
}
OrientDBスタジオのBROWSE Tabで、すべてのAuthor'sオブジェクトを取得するためのクエリを作成できます。
4.3. オブジェクトAPI
OrientDBには、データベースのオブジェクトタイプはありません。 したがって、オブジェクトAPIはドキュメントデータベースに依存しています。
Object APIタイプでは、他のすべての概念は同じままですが、POJOへのbindingが1つ追加されています。
OObjectDatabaseTxクラスを使用してexampleDBThreeに接続することから始めましょう。
@BeforeClass
public static void setup() {
String orientDBFolder = System.getenv("ORIENTDB_HOME");
db = new OObjectDatabaseTx("plocal:"
+ orientDBFolder + "/databases/exampleDBThree")
.open("admin", "admin");
}
次に、AuthorがAuthorデータを保持するために使用されるPOJOであると想定して、それを登録する必要があります。
db.getEntityManager().registerEntityClass(Author.class);
Authorには、次のフィールドのゲッターとセッターがあります。
-
ファーストネーム
-
苗字
-
レベル
引数なしのコンストラクターを確認した場合は、複数行の命令を使用してAuthorを作成しましょう。
Author author = db.newInstance(Author.class);
author.setFirstName("Luke");
author.setLastName("Sky");
author.setLevel(9);
db.save(author);
一方、AuthorのfirstName、lastName、およびlevelをそれぞれ受け取る別のコンストラクターがある場合、インスタンス化は1行だけです。
Author author = db.newInstance(Author.class, "Luke", "Sky", 9);
db.save(author);
次の行は、Authorクラスのすべてのレコードを参照および削除するために使用しています。
for (Author author : db.browseClass(Author.class)) {
db.delete(author);
}
すべての作成者をカウントするには、SQLクエリを記述する必要なく、クラスとデータベースインスタンスを提供するだけです。
long authorsCount = db.countClass(Author.class);
同様に、次のようにlevel7で作成者にクエリを実行します。
@Test
public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven() {
for (Author author : db.browseClass(Author.class)) {
db.delete(author);
}
Author authorOne
= db.newInstance(Author.class, "Leo", "Marta", 7);
db.save(authorOne);
Author authorTwo
= db.newInstance(Author.class, "Lucien", "Aurelien", 9);
db.save(authorTwo);
List result
= db.query(new OSQLSynchQuery(
"select * from Author where level = 7"));
assertEquals(1, result.size());
}
最後に、これはいくつかの高度なObject APIの使用法を紹介するofficial guideです。
5. 結論
この記事では、OrientDBをJavaAPIを備えたデータベース管理システムとして使用する方法を説明しました。 また、フィールドに検証を追加し、いくつかの簡単なクエリを作成する方法も学びました。
いつものように、この記事のソースコードはover on GitHubにあります。