序章

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

ArangoDBのコアはドキュメントストアですが、それはほんの始まりに過ぎません。 本格的なクエリ言語(AQLという名前)でデータをクエリしたり、 ACID準拠のトランザクションを作成したり、が埋め込まれたV8を使用してJavaScriptアプリケーションの形式でカスタムHTTPエンドポイントを追加したりできます。 。

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

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

  • Ubuntu14.04にArangoDBをインストールします
  • 基本的な使用法のためにArangoDBを構成する
  • データの挿入、変更、およびクエリ

コアコンセプト

この記事全体を通して、いくつかのコアコンセプトを使用します。 ArangoDBでプロジェクトを構築する前に、それらについてよく理解しておくことをお勧めします。

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

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

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

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

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

前提条件

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

  • Ubuntu14.04×64でドロップレットを作成する

  • sudoユーザーを追加します

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

  1. cd ~

ステップ1—ArangoDBをインストールする

ArangoDBは、多くのオペレーティングシステムとディストリビューション用に事前に構築されています。 ソースからビルドする必要がない可能性が高いです。 詳細については、ArangoDBドキュメントを参照してください。 このチュートリアルでは、Ubuntu14.04×64を使用します。

ArangoDBはOpenSUSEのビルドサービスを使用するため、最初にリポジトリの公開鍵をダウンロードします。

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

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

  1. sudo apt-key add Release.key

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

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

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

  1. sudo apt-get install arangodb

HTTP APIをクエリすることで、すべてがうまくいったかどうかを確認できます。

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

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

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

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

ArangoDBには、JavaScriptランタイムを介してデータベースへのフルアクセスを提供するコマンドラインクライアントであるarangoshが付属しています。 これを使用して、本番環境で管理タスクまたはスクリプトを実行できます。

また、ArangoDBとそのコア機能の使用を開始するのにも適しています。 フォローするには、次のようにarangoshセッションを開始します。

  1. arangosh

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

  1. 23 + 19

次の結果が得られます。

Output
42

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

ステップ3—データベースユーザーの追加

セキュリティ上の理由から、arangoshコマンドラインインターフェイスからのみユーザーを追加できます。 前の手順のarangoshシェルのままである必要があります。

次に、新しいユーザーsammyを追加しましょう。 このユーザーは、データベース全体にアクセスできます。 これは今のところ問題ありませんが、実稼働環境でより制限されたユーザーを作成することをお勧めします。 安全なpasswordを使用してください。

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

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

  1. exit

ステップ4—Webインターフェイスの構成

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

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

  1. 認証を有効にする

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

認証を有効にする

ArangoDBは、他の多くのNoSQLデータベースと同様に、認証が無効になっている状態で出荷されます。 共有環境でArangoDBを実行している場合や、Webインターフェイスを使用する場合は、認証を有効にすることを強くお勧めします。 このトピックの詳細については、ArangoDBのドキュメントを参照してください。

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

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

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

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

  1. sudo service arangodb restart

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

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

  1. sudo nano /etc/arangodb/arangod.conf

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

/etc/arangodb/arangod.conf

. . .

endpoint = tcp://your_server_ip:8529

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

  1. sudo nano /etc/arangodb/arangosh.conf

ここでも、endpoint行がtcp://your_server_ip:8529に設定されていることを確認してください。

/etc/arangodb/arangosh.conf
pretty-print = true

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

. . .

2つのマルチパート1行コマンドを実行してこれら2つのファイルを更新する場合は、代わりに次のコマンドを実行できます。

  1. sudo sed -i.bak "s/^endpoint = .*/endpoint = tcp:\/\/$(sudo ifconfig eth0 | grep "inet " | cut -d: -f 2 | awk '{print $1}'):8529/g" /etc/arangodb/arangod.conf
  1. sudo sed -i.bak "s/^endpoint = .*/endpoint = tcp:\/\/$(sudo ifconfig eth0 | grep "inet " | cut -d: -f 2 | awk '{print $1}'):8529/g" /etc/arangodb/arangosh.conf

これらの難解なコマンドは、現在のパブリックIPアドレスを抽出し、デフォルトのバインドアドレス(127.0.0.1)を置き換えます。 心配しないでください。-i.bakオプションは、構成を変更する前に更新を作成します。

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

  1. sudo service arangodb restart

ステップ5—ArangoDBWebインターフェースへのアクセス

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

http://your_server_ip:8529

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

警告:認証を設定しましたが、トランスポートはまだ保護されていません。 本番環境では、別のホストからArangoDBにアクセスできるようにする場合は、TLS暗号化を設定する必要があります。

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

The ArangoDB web interface dashboard

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

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

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

Create a new DB in the web interface

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

ステップ6—arangoshを使用してCRUD操作を実行する

ここではWebインターフェイスを終了し、arangoshコマンドラインインターフェイスに戻って、ArangoDBでの基本的なCRUD操作について説明します。 後で、Webインターフェースで同じ操作を再度説明しますが、シェルでそれを行うと、物事がどのように機能するかをよりよく理解するのに役立ちます。

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

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

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

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

  1. db._createDocumentCollection('songs')

ArangoDBは、コレクションを管理するための一連のメソッドを提供します。 それらのほとんどは、現時点では関心がありませんが、ArangoDBをさらに詳しく調べて、それらを確認してください。 ここでは、 CRUD 操作(作成、読み取り、更新、削除)、つまりデータベースに実際のデータを出し入れする方法に焦点を当てます。

ドキュメントの作成

SQLベースのデータベースに行がある場合、ArangoDBにはDocumentsがあります。 ArangoDBのドキュメントはJSONオブジェクトです。 各ドキュメントはコレクションに関連付けられており、_id_rev、および_keyの3つのコア属性があります。

ドキュメントは、/で区切られたコレクション名と_keyで構成されるドキュメントハンドルによってデータベース内で一意に識別されます。 ドキュメントハンドルは、ドキュメントの_idフィールドに保存されます。 _key_idはどちらも、リレーションデータベースの主キーに似ています。

注:自分で何かを指定しない場合、ArangoDBはドキュメントごとに_keyを作成します。 必要に応じてカスタム_keyを指定できますが、それが一意であることを確認する必要があります。 このチュートリアル全体を通して、_keyを明示的に設定して、例をコピーして貼り付けるのを簡単にします。

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

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

dbオブジェクトは、すべてのコレクションをプロパティとして保持します。 各コレクションは、そのコレクション内のドキュメントと対話するための機能を提供します。 save関数は、任意のJSONオブジェクトを取得し、それをドキュメントとしてコレクションに格納し、前述のコア属性とエラーが発生したかどうかを返します。 各操作からの戻り値は、やはりJSONオブジェクトです。

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

  1. db.songs.save(
  2. {album: "Led Zeppelin III", title: "Friends", artist: "Led Zeppelin", year: 1970, length: 235, _key: "friends"}
  3. );
  4. db.songs.save(
  5. {album: "Led Zeppelin III", title: "Celebration Day", artist: "Led Zeppelin", year: 1970, length: 209, _key: "celebration_day"}
  6. );
  7. db.songs.save(
  8. {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"}
  9. );
  10. db.songs.save(
  11. {album: "Led Zeppelin III", title: "Out On the Tiles", artist: "Led Zeppelin", year: 1970, length: 244, _key: "out_on_the_tiles"}
  12. );
  13. db.songs.save(
  14. {album: "Led Zeppelin III", title: "Gallows Pole", artist: "Led Zeppelin", year: 1970, length: 298, _key: "gallows_pole"}
  15. );
  16. db.songs.save(
  17. {album: "Led Zeppelin III", title: "Tangerine", artist: "Led Zeppelin", year: 1970, length: 192, _key: "tangerine"}
  18. );
  19. db.songs.save(
  20. {album: "Led Zeppelin III", title: "That's the Way", artist: "Led Zeppelin", year: 1970, length: 338, _key: "that_s_the_way"}
  21. );
  22. db.songs.save(
  23. {album: "Led Zeppelin III", title: "Bron-Y-Aur Stomp", artist: "Led Zeppelin", year: 1970, length: 260, _key: "bron_y_aur_stomp"}
  24. );
  25. db.songs.save(
  26. {album: "Led Zeppelin III", title: "Hats Off to (Roy) Harper", artist: "Led Zeppelin", year: 1970, length: 221, _key: "hats_off_to_roy_harper"}
  27. );

ドキュメントを読む

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

  1. 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" }

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

ドキュメントの更新

データの更新に関しては、replaceupdateの2つのオプションがあります。

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

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

  1. db.songs.update("songs/immigrant_song",
  2. { genre: "Hard Rock" }
  3. );

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

  1. 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を使用すると、データが破棄されます。

  1. db.songs.replace("songs/immigrant_song",
  2. { genre: "Hard Rock" }
  3. );

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

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

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

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

ドキュメントの削除

コレクションからドキュメントを削除するには、ドキュメントハンドルを指定してremove関数を呼び出します。

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

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

ステップ7—Webインターフェイスを使用したCRUD操作の実行

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

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

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

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

メインのコレクションページで、コレクションの追加ボタンをクリックします。

Add Collection in Web Interface

すでにsongsがあるので、albumsコレクションを追加します。 ポップアップ表示される新しいコレクションダイアログで、名前としてalbumsと入力します。 デフォルトのタイプであるDocumentで問題ありません。

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

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

Collection View

ドキュメントの作成

右上の+記号をクリックしてドキュメントを追加します。 最初に_keyの入力を求められます。 キーとしてled_zeppelin_IIIを入力します。

次に、ドキュメントの内容を編集できるフォームがあります。 ツリーと呼ばれる属性をグラフィカルに追加する方法がありますが、今のところ、ツリードロップダウンメニューからコードビューに切り替えます。

Create a Document

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

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

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

ドキュメントを読む

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

albumsコレクションをクリックすると、新しいエントリが表示されます。

ドキュメントの更新

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

ドキュメントの削除

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

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

前に述べたように、Webインターフェースには提供できるものがたくさんあります。 すべての機能をカバーすることはこのチュートリアルを超えているので、あなたはあなた自身で他の機能を探求するように誘われます。 このチュートリアルでは、もう1つの機能であるAQLエディターについて詳しく説明します。

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

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

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

エディターと結果ビューを切り替えるには、右上隅にあるクエリタブと結果タブを使用します。

The AQL Editor

エディターには、構文の強調表示、元に戻す/やり直し機能、およびクエリの保存があります。 次のセクションでは、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

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

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

FOR song IN songs

FILTER song.length > 180

RETURN song

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

Query Result

複雑なAQLの例

AQLには、サポートされているすべてのデータ型用の関数セットが付属しており、新しい関数の追加も可能です。 クエリ内で変数を割り当てる機能と組み合わせると、非常に複雑な構造を構築できます。 これにより、クライアントで実行するのではなく、データ集約型の操作をデータ自体に近づけることができます。 これを説明するために、曲の長さを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コレクションへの参照に置き換えます。 以前、アルバムレッドツェッペリン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属性とUNSETalbum属性を含む新しいドキュメントを作成することです。 曲のドキュメントの更新には、UPDATEではなくREPLACEを使用します。 これは、以前に新しい曲のドキュメントを作成したために可能です。

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

FOR song IN songs

FOR album IN albums

FILTER album._key == song.album_key

RETURN MERGE(song,

{ album: album.name }

)

AQLで達成できることの表面をかろうじて削っただけですが、何が可能かについては良い印象を持っているはずです。 完全な言語リファレンスとその他の例については、広範なドキュメントを参照してください。

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

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

DigitalOceanバックアップ機能を使用することは良いスタートです。 さらに、arangodumpおよびarangorestoreの使用を検討して、バックアップ対象とバックアップの保存場所をよりきめ細かく制御することもできます。

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

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

  1. sudo apt-get update

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

  1. sudo service arangodb stop

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

  1. sudo apt-get install arangodb

注:アップデートをインストールした後、システムはarangodbサービスを開始しようとします。 データベースファイルをアップグレードする必要があるため、これは失敗する可能性があります。 これは予想されることです。

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

  1. sudo service arangodb upgrade

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

  1. sudo service arangodb start

Foxxアプリケーションを使用したArangoDBの拡張

終了する前に、もう1つ言及する価値があります。ArangoDBにはすべてのJavaScriptを処理する統合V8エンジンがあり、HTTPサーバーが組み込まれているため、既存のHTTPAPIをカスタムエンドポイントで拡張できます。 この機能は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の優れた紹介については、このクックブックを参照してください。

結論

ArangoDBは、サポートされているさまざまなユースケースを備えた強力なデータベースです。 それはよく維持されており、非常に優れたドキュメントがあります。 すべての主要なオペレーティングシステム用のパッケージがあるので、それを始めるのは簡単です。 Webインターフェースは、機能を探索する負担を軽減します。リレーショナルのバックグラウンドを持っている場合、AQLを使用することはSQLを使用することとそれほど違いはありません。

JavaScriptアプリケーションとグラフ機能を使用してデータベースを拡張するオプションがあり、ArangoDBを完全なパッケージにして、アプリケーションを開始および拡張します。

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

次のステップとして、次のことをお勧めします。

  • 実際のアプリケーションでは、HTTPAPIを操作します。 ここでは、直接使用しない可能性が高いため、ここでは取り上げませんでしたが、多くの母国語ドライバーの1つを使用します。

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

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