Ubuntu14.04にArangoDBをインストールして使用する方法
序章
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ユーザーを追加します
ここで、新しく作成したユーザーを使用してサーバーにログインする必要があります。 チュートリアルのすべての例は、ユーザーのホームディレクトリから実行できます。
- cd ~
ステップ1—ArangoDBをインストールする
ArangoDBは、多くのオペレーティングシステムとディストリビューション用に事前に構築されています。 ソースからビルドする必要がない可能性が高いです。 詳細については、ArangoDBドキュメントを参照してください。 このチュートリアルでは、Ubuntu14.04×64を使用します。
ArangoDBはOpenSUSEのビルドサービスを使用するため、最初にリポジトリの公開鍵をダウンロードします。
- 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には arangosh
、JavaScriptランタイムを介してデータベースへのフルアクセスを提供するコマンドラインクライアント。 これを使用して、本番環境で管理タスクまたはスクリプトを実行できます。
また、ArangoDBとそのコア機能の使用を開始するのにも適しています。 フォローするには、開始します arangosh
このようなセッション:
- arangosh
結果は基本的に、任意のJavaScriptコードを実行できるJavaScriptシェルです。 たとえば、次の2つの数値を追加します。
- 23 + 19
次の結果が得られます。
Output42
このトピックをさらに深く掘り下げたい場合は、次のように入力します tutorial
シェルに。
ステップ3—データベースユーザーの追加
セキュリティ上の理由から、ユーザーを追加できるのは arangosh
コマンドラインインターフェイス。 あなたはまだ arangosh
前のステップのシェル。
次に、新しいユーザーsammyを追加しましょう。 このユーザーは、データベース全体にアクセスできます。 これは今のところ問題ありませんが、実稼働環境でより制限されたユーザーを作成することをお勧めします。 安全なものを使用する password
.
- require("org/arangodb/users").save("sammy", "password");
ここで終了します arangosh
シェル:
- exit
ステップ4—Webインターフェイスの構成
ArangoDBには、非常に強力なWebインターフェイスが付属しています。 監視機能、データブラウジング、インタラクティブなAPIドキュメント、強力なクエリエディタ、さらには統合されたクエリエディタを提供します arangosh
. このチュートリアルを思い出させるために、Webインターフェイスの使用法に焦点を当てます。
Webインターフェイスに簡単にアクセスできるようにするには、いくつかの準備を行う必要があります。
-
認証を有効にする
-
ArangoDBをパブリックネットワークインターフェイスにバインドします
認証を有効にする
ArangoDBは、他の多くのNoSQLデータベースと同様に、認証が無効になっている状態で出荷されます。 共有環境でArangoDBを実行している場合や、Webインターフェイスを使用する場合は、認証を有効にすることを強くお勧めします。 このトピックの詳細については、ArangoDBのドキュメントを参照してください。
で認証をアクティブ化する /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/arangod.conf
編集用ファイル:
- sudo nano /etc/arangodb/arangod.conf
アクティブなものを見つけます endpoint
行の終わりにある必要があります [server]
例のセクションの下のブロック。 自分のサーバーのIPアドレスとポートを使用して、以下に示すように設定を更新します 8529
.
. . .
endpoint = tcp://your_server_ip:8529
以来 arangosh
独自のデフォルト構成を使用する場合、エンドポイントを変更する必要があります /etc/arangodb/arangosh.conf
ファイルも:
- sudo nano /etc/arangodb/arangosh.conf
繰り返しますが、 endpoint
行はに設定されます tcp://your_server_ip:8529
.
pretty-print = true
[server]
endpoint = tcp://your_server_ip:8529
disable-authentication = true
. . .
2つのマルチパート1行コマンドを実行してこれら2つのファイルを更新する場合は、代わりに次のコマンドを実行できます。
- 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
- 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をもう一度再起動します。
- sudo service arangodb restart
ステップ5—ArangoDBWebインターフェースへのアクセス
これで、ブラウザでWebインターフェイスにアクセスできるようになります。
http://your_server_ip:8529
手順3でデータベース用に作成したユーザー名とパスワードでログインしてください。
警告:認証を設定しましたが、トランスポートはまだ保護されていません。 本番環境では、別のホストからArangoDBにアクセスできるようにする場合は、TLS暗号化を設定する必要があります。
表示される最初の画面は、データベースサーバーに関する基本的なメトリックを含むダッシュボードです。
上部のナビゲーションの中央に、 DB:_systemが表示されます。 これは、現在選択されているデータベースを示します。 デフォルトは _system
データベース。 特定の管理タスクは、 _system
データベース。
次のセクションでは、使用するデータベースを作成します。 DB:_system メニュー項目にカーソルを合わせ、DBの管理リンクをクリックします。
次のページで、データベースの追加ボタンをクリックします。 フォームに記入して、という名前のデータベースを作成します music_library
. このダイアログで以前と同じユーザー名とパスワードを入力する必要があります。そうしないと、後で新しいデータベースにアクセスできなくなります。
これで、ArangoDBで実際に何かを開始する準備が整いました。
ステップ6—arangoshを使用してCRUD操作を実行する
とりあえずWebインターフェースを離れて、 arangosh
ArangoDBの基本的なCRUD操作をカバーするコマンドラインインターフェイス。 後で、Webインターフェースで同じ操作を再度説明しますが、シェルでそれを行うと、物事がどのように機能するかをよりよく理解するのに役立ちます。
フォローするには、サーバーのコマンドラインに戻ります。 新しいに接続する music_library
ユーザーとパスワードを使用したデータベース:
- arangosh --server.database music_library --server.username sammy --server.password password
ドキュメントコレクションを作成する
リレーショナルデータベースのバックグラウンドを持っている場合、コレクションはSQLデータベースのテーブルに相当するArangoDBです。 音楽ライブラリに曲を保存するためのコレクションを作成します。
- db._createDocumentCollection('songs')
ArangoDBは、コレクションを管理するための一連のメソッドを提供します。 それらのほとんどは、現時点では関心がありませんが、ArangoDBをさらに詳しく調べて、それらを確認してください。 ここでは、 CRUD 操作(作成、読み取り、更新、削除)、つまりデータベースに実際のデータを出し入れする方法に焦点を当てます。
ドキュメントの作成
SQLベースのデータベースに行がある場合、ArangoDBにはDocumentsがあります。 ArangoDBのドキュメントはJSONオブジェクトです。 各ドキュメントはコレクションに関連付けられており、次の3つのコア属性があります。 _id
, _rev
、 と _key
.
ドキュメントは、コレクション名とコレクション名で構成されるドキュメントハンドルによってデータベース内で一意に識別されます。 _key
、で区切られています /
. ドキュメントハンドルはに保存されます _id
ドキュメントのフィールド。 両方 _key
そしてその _id
リレーションデータベースの主キーに似ています。
注:自分で何かを指定しない場合、ArangoDBは _key
ドキュメントごとに。 カスタムを指定できます _key
必要に応じて、ただし、それが一意であることを確認する必要があります。 このチュートリアル全体を通して、 _key
例をコピーして貼り付けるのを簡単にするために明示的に。
最初のドキュメントをに追加しましょう 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"
}
The db
オブジェクトは、すべてのコレクションをプロパティとして保持します。 各コレクションは、そのコレクション内のドキュメントと対話するための機能を提供します。 The 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"
}
ドキュメントを作成して読むことができるようになったので、ドキュメントを変更する方法を調べます。
ドキュメントの更新
データの更新に関しては、replaceとupdateの2つのオプションがあります。
The replace
関数は、完全に異なる属性を指定した場合でも、ドキュメント全体を新しいものに置き換えます。
The update
一方、関数は、指定された属性とマージすることにより、ドキュメントにパッチを適用します。 破壊的でないものを試してみましょう update
まず、更新します genre
私たちの曲の1つ:
- 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"
}
The update
関数は、大きなドキュメントがあり、その属性の小さなサブセットのみを更新する必要がある場合に特に役立ちます。
対照的に、同じJSONを replace
関数はデータを破壊します。
- 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://your_server_ip:8529/_db/music_library
ブラウザで。
ドキュメントコレクションを作成する
上部のナビゲーションバーにあるコレクションタブをクリックします。
あなたは既存のものを見ることができます songs
コマンドラインから追加したコレクション。 必要に応じて、それをクリックしてエントリを表示してください。
メインのコレクションページで、コレクションの追加ボタンをクリックします。
すでに持っているので songs
、追加します albums
コレクション。 入る albums
ポップアップ表示されたNewCollectionダイアログのNameとして。 デフォルトのタイプであるDocumentで問題ありません。
保存をクリックすると、ページに2つのコレクションが表示されます。
クリックしてください albums
コレクション。 空のコレクションが表示されます。
ドキュメントの作成
右上の+記号をクリックしてドキュメントを追加します。 あなたは最初に求められます _key
. 入る led_zeppelin_III
キーとして。
次に、ドキュメントの内容を編集できるフォームがあります。 ツリーと呼ばれる属性をグラフィカルに追加する方法がありますが、今のところ、ツリードロップダウンメニューからコードビューを選択して切り替えます。
次の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タブをクリックします。 空白のエディターが表示されます。
エディターと結果ビューを切り替えるには、右上隅にあるクエリタブと結果タブを使用します。
エディターには、構文の強調表示、元に戻す/やり直し機能、およびクエリの保存があります。 次のセクションでは、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操作もサポートしています。
データベース内のすべての曲の概要を取得するには、次のクエリを実行します。 これは、 SELECT * FROM songs
SQLベースのデータベースの場合(エディターは最後のクエリを記憶しているため、ごみ箱アイコンをクリックしてエディターをクリアする必要があります):
FOR song IN songs RETURN song
これで、テキストフィールドに曲データベースのすべてのエントリが表示されます。 クエリタブに戻り、エディターを再度クリアします。
別の例には、再生時間が3分を超える曲の基本的なフィルタリングが含まれます。
FOR song IN songs
FILTER song.length > 180
RETURN song
結果は、エディターの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) }
今回は、曲のタイトルと長さを返します。 The 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
属性と UNSET
the album
属性。 我々は使用するだろう REPLACE
ではなく UPDATE
曲のドキュメントを更新します。 これは、以前に新しい曲のドキュメントを作成したために可能です。
このデータ移行後、アルバムドキュメントを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の新しいバージョンがリリースされると、構成されたパッケージリポジトリを通じて公開されます。 最新バージョンをインストールするには、最初にリポジトリインデックスを更新する必要があります。
- sudo apt-get update
次に、データベースを停止します。
- sudo service arangodb stop
最新バージョンに更新します。
- sudo apt-get install arangodb
注:アップデートをインストールした後、システムは arangodb
サービス。 データベースファイルをアップグレードする必要があるため、これは失敗する可能性があります。 これは予想されることです。
データベースファイル自体をアップグレードする必要がある場合があります。
- sudo service arangodb upgrade
その後、通常どおりサーバーを起動します。
- 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データベースで使用されるリレーショナルアプローチよりもメリットがあります。