前書き

ArangoDBはNoSQLデータベースです。 多くのNoSQLデータベースがすでに存在していた2011年に、さまざまなユースケースをカバーできる包括的なデータベースソリューションになることを目標に作成されました。

ArangoDBの中核にはhttps://en.wikipedia.org/wiki/Document-oriented_database [ドキュメントストア]がありますが、これはほんの始まりにすぎません。 本格的なクエリ言語(AQL)を使用してデータをクエリし、https://en.wikipedia.org/wiki/ACID [ACID準拠]トランザクションを作成し、httpsを使用してJavaScriptアプリケーションの形式でカスタムHTTPエンドポイントを追加できます。 //developers.google.com/v8/[embedded V8]など。

ArangoDBには多くの機能があるため、最初は恐ろしいかもしれませんが、もう一度見てみると複雑ではありません。 この記事は、ArangoDBのインストールを支援し、そのコア機能の使用方法を簡単に紹介します。

このチュートリアルを完了すると、次のことができるようになります。

  • Ubuntu 14.04にArangoDBをインストールします

  • 基本的な使用のためにArangoDBを構成する

  • データの挿入、変更、クエリ

コアコンセプト

記事全体を通して、いくつかのコア概念を使用します。 ArangoDBでプロジェクトをビルドする前に、おそらくそれらに慣れる必要があります。

  • Document Store:リレーショナルデータベースがデータを保存する方法とは対照的に、ArangoDBはドキュメントにデータを保存します。 ドキュメントは、キーと値のペア_で構成される任意のデータ構造です。 _key_は、_value(リレーショナルデータベースの列のような)に名前を付ける文字列です。 _value_には、任意のデータ型を使用できますが、別のドキュメントも使用できます。 ドキュメントはどのスキーマにもバインドされていません。

  • クエリ言語:APIまたはクエリ言語を使用してデータを操作します。 前者はAPIユーザーに多くの詳細を残しますが、クエリ言語はデータベースに詳細を渡します。 リレーショナルデータベースでは、SQLはクエリ言語の例です。

  • ACID A トミシティ、 C 一貫性、 I solation、 D の4つのプロパティは、データベーストランザクションの保証を表します。 ArangoDBはACID準拠のトランザクションをサポートしています。

  • V8:Chromeを強化するGoogleのJavaScriptエンジンは、他のソフトウェアにも簡単に組み込むことができます。 ArangoDBで使用すると、データベース内でJavaScriptを使用できます。 ArangoDBの内部機能の多くはJavaScriptで構築されています。

  • HTTP API:ArangoDBは、クライアントがデータベースと対話できるようにするHTTP APIを提供します。 APIはhttps://en.wikipedia.org/wiki/Representational_state_transfer [リソース指向]であり、JavaScriptで拡張できます。

前提条件

開始する前に、Dropletが正しく設定されていることを確認してください。

  • Ubuntu 14.04 x64でドロップレットを作成する

  • sudo userを追加します

ここで、新しく作成したユーザーを使用してサーバーにログインする必要があります。 チュートリアルのすべての例は、ユーザーのホームディレクトリから実行できます。

cd ~

ステップ1-ArangoDBのインストール

ArangoDBは、多くのオペレーティングシステムとディストリビューション用に事前に構築されています。 ソースからビルドする必要はありません。 詳細については、ArangoDB documentationを参照してください。 このチュートリアルでは、Ubuntu 14.04 x64を使用します。

ArangoDBはOpenSUSEのhttps://build.opensuse.org/ [ビルドサービス]を使用するため、まずリポジトリの公開キーをダウンロードします。

wget https://www.arangodb.com/repositories/arangodb2/xUbuntu_14.04/Release.key

キーをインストールするには、 `+ sudo +`が必要です。

sudo apt-key add Release.key

次に、aptリポジトリを追加し、インデックスを更新します。

sudo apt-add-repository 'deb https://www.arangodb.com/repositories/arangodb2/xUbuntu_14.04/ /'
sudo apt-get update

ArangoDBをインストールします。

sudo apt-get install arangodb

HTTP APIを照会することにより、すべてがうまくいったかどうかを確認できます。

curl http://localhost:8529/_api/version

次の出力は、ArangoDBが稼働中であることを示しています。

Output{"server":"arango","version":"2.5.5"}

ステップ2-arangoshを使用してコマンドラインにアクセスする

ArangoDBには、JavaScriptランタイムを介してデータベースに完全にアクセスできるコマンドラインクライアントである `+ arangosh +`が付属しています。 本番環境で管理タスクまたはスクリプトを実行するために使用できます。

また、ArangoDBとそのコア機能を使い始めるのにも適しています。 従うには、次のような `+ arangosh +`セッションを開始します。

arangosh

結果は、基本的に任意のJavaScriptコードを実行できるJavaScriptシェルです。 たとえば、2つの数字を追加します。

23 + 19

次の結果が得られます。

Output42

このトピックをさらに深く掘り下げたい場合は、シェルに「+ tutorial +」と入力します。

手順3-データベースユーザーの追加

セキュリティ上の理由から、ユーザーを追加できるのは、 `+ arangosh `コマンドラインインターフェースからのみです。 前のステップの ` arangosh +`シェルにいるはずです。

では、新しいユーザー* sammy *を追加しましょう。 このユーザーは、データベース全体にアクセスできます。 現時点ではこれで問題ありませんが、実稼働環境でより制限されたユーザーを作成したい場合があります。 安全な「++」を使用します。

require("org/arangodb/users").save("", "");

次に、 `+ arangosh +`シェルを終了します。

exit

手順4-Webインターフェイスの構成

ArangoDBには、非常に強力なWebインターフェイスが付属しています。 監視機能、データブラウジング、インタラクティブなAPIドキュメント、強力なクエリエディター、さらには統合された `+ arangosh +`を提供します。 このチュートリアルを思い出させるために、Webインターフェースの使用に焦点を当てます。

Webインターフェイスに簡単にアクセスできるようにするには、いくつかの準備を行う必要があります。

  1. 認証を有効にする

  2. ArangoDBをパブリックネットワークインターフェースにバインドする

認証を有効にする

ArangoDBは、他の多くのNoSQLデータベースと同様に、認証が無効な状態で出荷されます。 ArangoDBを共有環境で実行している場合、および/またはWebインターフェースを使用したい場合は、*認証を有効にする*ことを強くお勧めします。 このトピックの詳細については、https://docs.arangodb.com/ConfigureArango/Authentication.html [ArangoDB documentation]を参照してください。

+ / etc / arangodb / arangod.conf +`ファイルで認証を有効にします。 このコマンドを実行してバックアップファイルを作成し、 `+ disable-authentication`パラメーターを + no + `に設定できます。

sudo sed -i.bak 's/disable-authentication = yes/disable-authentication = no/g' /etc/arangodb/arangod.conf

または、テキストエディターを使用して、「+ disable-authentication 」パラメーターを「 no +」に設定します。

データベースを再起動します。

sudo service arangodb restart

ArangoDBをパブリックネットワークインターフェイスにバインドする

パブリックネットワークインターフェイスでリッスンするようにArangoDBを構成します。 まず、編集のために `+ / etc / arangodb / arangodb.conf`ファイルを開きます:

sudo nano /etc/arangodb/arangod.conf

例のセクションの下にある `+ [server] `ブロックの最後にあるアクティブな ` endpoint `行を見つけます。 独自のサーバーのIPアドレスとポート「+8529」を使用して、以下に示すように設定を更新します。

/etc/arangodb/arangod.conf

. . .

endpoint = tcp://:8529

`+ arangosh `は独自のデフォルト設定を使用するため、 ` / etc / arangodb / arangosh.conf +`ファイルのエンドポイントも変更する必要があります。

sudo nano /etc/arangodb/arangosh.conf

繰り返しますが、 `+ endpoint `行が ` tcp://:8529 +`に設定されていることを確認してください。

/etc/arangodb/arangosh.conf

pretty-print = true

[server]
endpoint = tcp://:8529
disable-authentication = true

. . .

ArangoDBをもう一度再起動します。

sudo service arangodb restart

ステップ5-ArangoDB Webインターフェースへのアクセス

これで、ブラウザーでWebインターフェースにアクセスできるようになります。

http://:8529

手順3でデータベース用に作成したユーザー名とパスワードでログインしてください。

最初に表示される画面は、データベースサーバーに関する基本的なメトリックを含むダッシュボードです。

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/iKDjIgx.png [ArangoDB Webインターフェースダッシュボード]

上部ナビゲーションの中央に* DB:_system *が表示されます。 これは、現在選択されているデータベースを示します。 デフォルトは `+ _system `データベースです。 特定の管理タスクは、 ` _system +`データベースでのみ実行できます。

次のセクションでは、使用するデータベースを作成します。 * DB:_system メニュー項目にカーソルを合わせ、 Manage DBs *リンクをクリックします。

次のページで、[データベースの追加]ボタンをクリックします。 フォームに入力して、「+ music_library +」という名前のデータベースを作成します。 このダイアログで以前と同じユーザー名とパスワードを入力する必要があります。入力しないと、後で新しいデータベースにアクセスできなくなります。

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/DA8kRTO.png [Webインターフェースで新しいDBを作成]

ArangoDBで実際に何かを開始する準備が整いました。

ステップ6-arangoshを使用したCRUD操作の実行

ここではWebインターフェースをそのままにして、ArangoDBでの基本的なCRUD操作をカバーするために、 `+ arangosh +`コマンドラインインターフェースに戻ります。 後でWebインターフェイスで同じ操作をカバーしますが、シェルでそれを行うと、物事の仕組みをよりよく理解するのに役立ちます。

従うには、サーバーのコマンドラインに戻ります。 ユーザーとパスワードを使用して、新しい「+ music_library +」データベースに接続します。

arangosh --server.database music_library --server.username  --server.password

ドキュメントコレクションを作成する

リレーショナルデータベースのバックグラウンドから来た場合、コレクションはSQLデータベースのテーブルに相当するArangoDBです。 音楽ライブラリに曲を保存するコレクションを作成します。

db._createDocumentCollection('songs')

ArangoDBは一連のhttps://docs.arangodb.com/Collections/CollectionMethods.html [コレクションを管理するメソッド]を提供します。 それらのほとんどはこの時点では興味がありませんが、ArangoDBをさらに学習するときにそれらを見てください。 ここでは、_CRUD_操作(作成、読み取り、更新、削除)に焦点を当てます。つまり、実際のデータをデータベースに出し入れする方法です。

ドキュメントを作成する

SQLベースのデータベースに行がある場合、ArangoDBにはhttps://docs.arangodb.com/Documents[Documents]があります。 ArangoDBのドキュメントはJSONオブジェクトです。 各ドキュメントはコレクションに関連付けられ、3つのコア属性、「+ _ id 」、「 _ rev 」、および「 _key +」を持っています。

ドキュメントはデータベース内でhttps://docs.arangodb.com/Glossary#document_handle [ドキュメントハンドル]によって一意に識別されます。ドキュメント名はコレクション名と「+ _key 」で構成され、「 / 」で区切られます。 ドキュメントハンドルはドキュメントの ` _id `フィールドに保存されます。 ` _key `と ` _id +`の両方は、関係データベースの主キーに似ています。

最初のドキュメントを `+ songs`コレクションに追加しましょう:

db.songs.save(
{ title: "Immigrant Song", album: "Led Zeppelin III", artist: "Led Zeppelin", year: 1970, length: 143, _key: "immigrant_song" }
)
Output{
 "error" : false,
 "_id" : "songs/immigrant_song",
 "_rev" : "11295857653",
 "_key" : "immigrant_song"
}

`+ db `オブジェクトはすべてのコレクションをプロパティとして保持します。 各コレクションには、そのコレクション内のドキュメントと対話するための関数が用意されています。 ` save +`関数はJSONオブジェクトを受け取り、それをドキュメントとしてコレクションに保存し、前述のコア属性とエラーが発生したかどうかを返します。 各操作からの戻りは、JSONオブジェクトです。

何かをするためには、さらにドキュメントが必要です。 次のスニペットをコピーして貼り付け、データベースにさらにいくつかのエントリを追加します。

db.songs.save(
{album: "Led Zeppelin III", title: "Friends", artist: "Led Zeppelin", year: 1970, length: 235, _key: "friends"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Celebration Day", artist: "Led Zeppelin", year: 1970, length: 209, _key: "celebration_day"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Since I've Been Loving You", artist: "Led Zeppelin", year: 1970, length: 445, _key: "since_i_ve_been_loving_you"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Out On the Tiles", artist: "Led Zeppelin", year: 1970, length: 244, _key: "out_on_the_tiles"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Gallows Pole", artist: "Led Zeppelin", year: 1970, length: 298, _key: "gallows_pole"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Tangerine", artist: "Led Zeppelin", year: 1970, length: 192, _key: "tangerine"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "That's the Way", artist: "Led Zeppelin", year: 1970, length: 338, _key: "that_s_the_way"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Bron-Y-Aur Stomp", artist: "Led Zeppelin", year: 1970, length: 260, _key: "bron_y_aur_stomp"}
);

db.songs.save(
{album: "Led Zeppelin III", title: "Hats Off to (Roy) Harper", artist: "Led Zeppelin", year: 1970, length: 221, _key: "hats_off_to_roy_harper"}
);

文書を読む

ドキュメントを取得するには、ドキュメントハンドルまたは `+ _key `を使用できます。 ドキュメントハンドルを使用する必要があるのは、コレクション自体を調べない場合のみです。 コレクションがあれば、 ` document`関数を使用できます:

db.songs.document('immigrant_song');
Output{
 "year" : 1970,
 "length" : 143,
 "title" : "Immigrant Song",
 "album" : "Led Zeppelin III",
 "artist" : "Led Zeppelin",
 "_id" : "songs/immigrant_song",
 "_rev" : "11295857653",
 "_key" : "immigrant_song"
}

ドキュメントを作成して読むことができるようになったので、ドキュメントを変更する方法を検討します。

ドキュメントの更新

データの更新に関しては、https://docs.arangodb.com/Documents/DocumentMethods.html#replace [+ replace +]とhttps://docs.arangodb.com/Documents/DocumentMethodsの2つのオプションがあります。 .html#update [+ update +]。

`+ replace +`関数は、まったく異なる属性を指定した場合でも、ドキュメント全体を新しいドキュメントに置き換えます。

一方、 `+ update `関数は、指定された属性とマージすることでドキュメントにパッチを適用します。 まず、破壊性の低い「 update 」を試してみましょう。ここでは、曲の1つの「 genre +」を更新します。

db.songs.update("songs/immigrant_song",

{ genre: "Hard Rock" }

);

更新された曲のエントリを見てみましょう。

db.songs.document("songs/immigrant_song");
Output{
 "year" : 1970,
 "length" : 143,
 "title" : "Immigrant Song",
 "album" : "Led Zeppelin III",
 "artist" : "Led Zeppelin",
 "genre" : "Hard Rock",
 "_id" : "songs/immigrant_song",
 "_rev" : "11421424629",
 "_key" : "immigrant_song"
}

`+ update +`関数は、大きなドキュメントがあり、その属性の小さなサブセットのみを更新する必要がある場合に特に役立ちます。

対照的に、 `+ replace +`関数で同じJSONを使用すると、データが破壊されます。

db.songs.replace("songs/immigrant_song",

{ genre: "Hard Rock" }

);

更新された曲を今すぐ表示:

db.songs.document("songs/immigrant_song")

ご覧のとおり、元のデータはドキュメントから削除されています。

Output{
 "genre" : "Hard Rock",
 "_id" : "songs/immigrant_song",
 "_rev" : "11495939061",
 "_key" : "immigrant_song"
}

ドキュメントを削除する

コレクションからドキュメントを削除するには、ドキュメントハンドルで `+ remove +`関数を呼び出します:

db.songs.remove("songs/immigrant_song")

`+ arangosh +`シェルは優れたツールですが、ArangoDBのその他の機能を調べるのは面倒です。 次に、組み込みのWebインターフェイスを調べて、その機能をさらに掘り下げます。

手順7-Webインターフェイスを使用したCRUD操作の実行

`+ arangosh `でドキュメントを処理する方法を見てきましたが、今度はWebインターフェースに戻ります。 ブラウザで ` http://:8529 / _db / music_library +`にアクセスします。

ドキュメントコレクションを作成する

上部のナビゲーションバーの[コレクション]タブをクリックします。

コマンドラインから追加した既存の `+ songs +`コレクションを確認できます。必要に応じて、クリックしてエントリを表示してください。

メインの* Collections ページで、 Add Collection *ボタンをクリックします。

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/V05LxrP.png [Webインターフェイスでコレクションを追加]

すでに `+ songs `があるので、 ` albums `コレクションを追加します。 表示された[新しいコレクション]ダイアログの[名前]に「+アルバム」と入力します。 デフォルトのタイプ* Document *で問題ありません。

[保存]をクリックすると、ページに2つのコレクションが表示されます。

`+ albums +`コレクションをクリックします。 空のコレクションが表示されます:

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/d8qIcmh.png [コレクションビュー]

ドキュメントを作成する

右上隅にある* + *記号をクリックして、ドキュメントを追加します。 最初に `+ _key `を要求されます。 キーとして「 led_zeppelin_III +」と入力します。

次に、ドキュメントの内容を編集できるフォームがあります。 * Tree と呼ばれる属性をグラフィカルに追加する方法がありますが、現時点では、 Tree ドロップダウンメニューから選択して Code *ビューに切り替えます。

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/0DfPNao.png [ドキュメントの作成]

以下のJSONをコピーしてエディター領域に貼り付けてください(中括弧のセットを1つだけ使用してください)。

{
"name": "Led Zeppelin III",
"release_date": "1970-10-05",
"producer": "Jimmy Page",
"label": "Atlantic",
"length": 2584
}

このモードでは、キーを引用符で囲む必要があることに注意してください。 完了したら、[保存]ボタンをクリックします。 保存が成功したことを示すために、ページがしばらく緑色で点滅します。

文書を読む

新しいドキュメントを保存した後、手動で* Collections *ページに戻る必要があります。

「アルバム」コレクションをクリックすると、新しいエントリが表示されます。

ドキュメントの更新

文書の内容を編集するには、文書概要で編集する行をクリックするだけです。 新しいドキュメントを作成するときと同じエディターが表示されます。

ドキュメントを削除する

ドキュメントの削除は、各ドキュメント行の最後にある*-*アイコンを押すだけです。 プロンプトが表示されたら削除を確認します。

さらに、特定のコレクションの*コレクション*概要ページでは、データのエクスポートとインポート、インデックスの管理、ドキュメントのフィルタリングを行うことができます。

前述したように、Webインターフェースには多くの機能があります。 すべての機能をカバーするのはこのチュートリアルの範囲を超えているため、他の機能を自分で試してみてください。 このチュートリアルでは、もう1つの機能、AQLエディターについて詳しく説明します。

ステップ8-AQLを使用したデータのクエリ

はじめに述べたように、ArangoDBにはAQLと呼ばれる本格的なクエリ言語が付属しています。

WebインターフェースでAQLを操作するには、上部ナビゲーションの[* AQLエディター*]タブをクリックします。 空白のエディターが表示されます。

エディターと結果ビューを切り替えるには、右上隅の* Query および Result *タブを使用します。

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/eKTShDh.png [AQLエディター]

エディターには、構文の強調表示、元に戻す/やり直し機能、およびクエリの保存があります。 次のセクションでは、AQLの機能のいくつかについて説明します。 完全なリファレンスについては、https://docs.arangodb.com/Aql [包括的なドキュメント]をご覧ください。

AQLの基本

AQLは宣言型言語です。つまり、クエリはどのような結果を達成すべきかを表現しますが、どのように達成すべきかは表現しません。 データのクエリだけでなく、データの変更も可能です。 両方のアプローチを組み合わせて、複雑なタスクを達成できます。

AQLでのクエリの読み取りと変更は、ACIDに完全に準拠しています。 操作は全体で完了するか、まったく完了しません。 データの読み取りも、データの一貫したスナップショットで行われます。

データの作成から始めます。 「+ songs +」コレクションにさらに曲を追加しましょう。 次のクエリをコピーして貼り付けてください。

FOR song IN [

{ album: "Led Zeppelin", title: "Good Times Bad Times", artist: "Led Zeppelin", length: 166, year: 1969, _key: "good_times_bad_times" }

,

{ album: "Led Zeppelin", title: "Dazed and Confused", artist: "Led Zeppelin", length: 388, year: 1969, _key: "dazed_and_confused" }

,

{ album: "Led Zeppelin", title: "Communication Breakdown", artist: "Led Zeppelin", length: 150, year: 1969, _key: "communication_breakdown" }

]

INSERT song IN songs

[送信]ボタンをクリックします。

このクエリはすでにAQLの動作の良い例です。`+ FOR + `でドキュメントのリストを反復処理し、各ドキュメントで操作を実行します。 リストは、JSONオブジェクトまたはデータベース内のコレクションを含む配列にすることができます。 操作には、フィルタリング、変更、追加ドキュメントの選択、新しい構造の作成、または(この例のように)データベースへのドキュメントの挿入が含まれます。 実際、AQLはすべてのCRUD操作もサポートしています。

データベース内のすべての曲の概要を取得するには、次のクエリを実行します。 これは、SQLベースのデータベースの `+ SELECT * FROM songs +`と同等です(エディターは最後のクエリを記憶しているため、*ゴミ箱*アイコンをクリックしてエディターをクリアする必要があります)。

FOR song IN songs RETURN song

これで、曲データベースのすべてのエントリがテキストフィールドに表示されます。 * Query *タブに戻り、エディターを再度クリアします。

別の例では、3分の再生時間を超える曲の基本的なフィルタリングを行います。

FOR song IN songs

FILTER song.length > 180

RETURN song

結果は、エディターの[結果]タブに表示されます。

image:https://assets.digitalocean.com/articles/arangodb-ubuntu1404/tFZRf5R.png [クエリ結果]

複雑なAQLの例

AQLには、サポートされているすべてのデータ型のhttps://docs.arangodb.com/Aql/Functions.html [関数のセット]が付属しており、https://docs.arangodb.com/AqlExtending [新しい関数の追加]も可能です。 。 クエリ内で変数を割り当てる機能と組み合わせて、非常に複雑な構造を構築できます。 これにより、データ集中型の操作をクライアントで実行するのではなく、データ自体に近づけることができます。 これを説明するために、ユーザーが読みやすいように、曲の長さを「+ mm:ss +」としてフォーマットします。

FOR song IN songs

FILTER song.length > 180

LET minutes = FLOOR(song.length / 60)

LET seconds = song.length % 60

RETURN

{ title: song.title, duration: CONCAT_SEPARATOR(':', minutes, seconds) }

今回は、曲のタイトルと期間を返します。 `+ RETURN +`を使用すると、入力ドキュメントごとに返す新しいJSONオブジェクトを作成できます。

AQLは多くの機能を備えた複雑な言語です。 ただし、特にNoSQLデータベースのコンテキストでは、言及する価値のあるもう1つの機能があります。結合です。

AQLに参加します

データベースとしてドキュメントストアを使用すると、いくつかの意味があります。 リレーショナルデータベースを使用する場合とは異なる方法でデータをモデル化する必要があります。

ドキュメントストアでは、通常はリレーションとしてモデル化されるデータを埋め込むことができますが、このアプローチは常に実行できるとは限りません。 関係がもっと意味をなす場合があります。 データベースに必要な結合を実行させる機能がないと、クライアント上のデータを結合するか、データモデルを非正規化しサブドキュメントを埋め込むことになります。 これは、複雑で大きなデータセットの場合に特に問題になります。

それでは、参加しましょう。

この機能を説明するために、曲の `+ album `属性を ` albums +`コレクションへの参照に置き換えます。 以前にアルバムとして_Led Zeppelin III_をドキュメントとして作成しました。 前の例でアルバムを削除した場合は、戻ってアルバムを再度追加してください。

このクエリは、トリックになります:

FOR album IN albums

FOR song IN songs

FILTER song.album == album.name

LET song_with_album_ref = MERGE(UNSET(song, 'album'),

{ album_key: album._key }

)

REPLACE song WITH song_with_album_ref IN songs

最初にすべてのアルバムを反復処理してから、このアルバムに関連付けられているすべての曲を検索します。 次のステップは、 + album_key +`属性と `+ UNSET + `+ album `属性を含む新しいドキュメントを作成することです。 歌のドキュメントを更新するには、「 UPDATE」ではなく「+ REPLACE」を使用します。 以前に新しい曲のドキュメントを作成したため、これは可能です。

このデータ移行後、アルバムドキュメントを1か所で管理できるようになりました。 曲のデータを取得するときに、結合を使用して、アルバム名を再び曲のドキュメントに追加できます。

FOR song IN songs

FOR album IN albums

FILTER album._key == song.album_key

RETURN MERGE(song,

{ album: album.name }

)

AQLで達成できることの表面をかろうじて削りましたが、何が可能かについての良い印象を持っているはずです。 完全な言語リファレンスおよびその他の例については、広範なhttps://docs.arangodb.com/Aql[documentation]を参照してください。

(オプション)ステップ9-バックアップの作成

ArangoDBデータベースを運用環境に入れたら、バックアップについて考え始める必要があります。 ただし、その前にバックアップを確立することをお勧めします。

DigitalOceanのバックアップ機能を使用することは良いスタートです。 さらに、https://docs.arangodb.com/Arangodump [+ arangodump +]およびhttps://docs.arangodb.com/Arangorestore [+ arangorestore +]を使用して、よりきめ細かくすることもできます。バックアップ対象とバックアップの保存場所を制御します。

(オプション)ステップ10-アップグレード

ArangoDBの新しいバージョンがリリースされると、構成済みのパッケージリポジトリを介して公開されます。 最新バージョンをインストールするには、最初にリポジトリインデックスを更新する必要があります。

sudo apt-get update

データベースを停止します。

sudo service arangodb stop

最新バージョンに更新します。

sudo apt-get install arangodb

データベースファイル自体をアップグレードする必要がある場合があります。

sudo service arangodb upgrade

その後、通常どおりサーバーを起動します。

sudo service arangodb start

FoxxアプリケーションでArangoDBを拡張する

終了する前に、もう1つ言及する価値があります。ArangoDBにはすべてのJavaScriptを処理する統合V8エンジンがあり、HTTPサーバーが組み込まれているため、既存のHTTP APIをカスタムエンドポイントで拡張できます。 この機能はhttps://docs.arangodb.com/Foxx[Foxx]と呼ばれます。

Foxxは、ArangoDBを使用して永続データを使用してカスタムマイクロサービスを構築するフレームワークです。 FoxxアプリはJavaScriptで記述され、ArangoDBのV8コンテキストで実行されます。 アプリはネイティブJavaScriptインターフェイスに直接アクセスできるため、HTTPラウンドトリップなしでデータにアクセスできます。 Foxxは、RubyのSinatraまたはPythonのFlaskの意味で最小限のフレームワークを提供します。 コントローラーを作成して、着信要求を処理し、モデル内にビジネスロジックを実装します。

Foxxアプリは、Webインターフェイスを介して管理でき、他のアプリと同様に開発できます。 バージョン管理下に置いたり、Gitリポジトリから直接デプロイすることもできます。 これらは単なるJavaScriptであるため、単体テストは簡単です。 単純なユースケースでは、リレーショナルデータベースシステムのストアドプロシージャによく似ていますが、Foxxコードの保守とテストははるかに簡単です。

Foxxアプリをストアドプロシージャとして使用することは、ほんの始まりに過ぎません。 特定のビジネスロジックを共有する複数のアプリケーションがあるとします。 Foxxを使用すると、このビジネスロジックをデータの近くに移動して、処理を高速化し、コンポーネント間で共有実装を分散する複雑さを軽減できます。 ArangoDBをクラスターとして実行すると、クラスター内の各メンバーでFoxxアプリを利用できるようになります。

Foxxを使用すると、Webアプリケーション全体も可能です。 AngularやEmberなどのフロントエンドフレームワークを使用すると、データベースから完全にアプリケーションを実行できます。 これに追加のインフラストラクチャは必要ありません。 本番環境では、最終的にNginxなどをArangoDBの前に配置します。 ArangoDBには、認証やセッションストアなどの一般的な機能を提供するFoxxアプリが付属しています。 HTTP機能に依存しない場合は、npmパッケージを使用することもできます。

Foxxの概要については、https://docs.arangodb.com/cookbook/FoxxFirstSteps.html [cookbook]を参照してください。

結論

ArangoDBは、サポートされているさまざまなユースケースを持つ強力なデータベースです。 よく管理されており、非常に優れたドキュメントがあります。 主要なオペレーティングシステムにはすべてパッケージが用意されているため、使い始めるのは簡単です。 Webインターフェースは、機能を調査する負担を軽減します。リレーショナルのバックグラウンドから来た場合、AQLを使用することはSQLを使用することと同じです。

JavaScriptアプリケーションを使用してデータベースを拡張するオプションとグラフ機能を使用すると、ArangoDBを完全なパッケージにして、アプリケーションを開始して成長させることができます。

これまでに、ArangoDBの全体像を共有しました。

次のステップとして、以下を提案します。

  • 実際のアプリケーションでは、HTTP APIとやり取りします。 ここでは、多くのhttps://www.arangodb.com/download [ネイティブ言語ドライバー]の1つを介して直接使用することはほとんどないため、ここでは取り上げませんでした。

  • ArangoDBのデータとのやり取りは、ほとんどの場合AQLを介して行われます。 実稼働環境でArangoDBを使用する場合は、慣れる必要があります。

  • ArangoDBはドキュメントストアであるだけでなく、非常に強力なグラフ機能も備えています。 有向グラフの頂点としてデータをモデル化できます。 リレーションは、 `+ _key +`参照を使用する代わりに、それらの頂点間のエッジとしてモデル化できます。 この方法でデータをモデル化することは、SQLデータベースで使用されるリレーショナルアプローチよりもhttps://www.youtube.com/watch?v=2_9Fd0Rqb5k [メリットがあります]。