Home » スタッフBlog » ArangoDBを触ってみました

ArangoDBを触ってみました

category : スタッフBlog 2016.12.1 

技術部の山下学志です。

昨今盛り上がっている開発手法の一つに、マイクロサービスアーキテクチャというものがあります。分割された複数のサービスの組み合わせで、アプリケーションを作る方法のことです。今までの開発からガラリと変わりそうな考え方ですが、これを構成するためのフレームワークが各言語で続々と出現しており、それらはすでに選別・淘汰の段階に入っているとのこと。ならばいいものがないものかと調べている際に、「ArangoDB Foxx」というJavaScriptのフレームワークを知りました。
データの移動をできるだけ少なくするようにして、システム全体の高速化や省電力化に直結するように最適化したフレームワークだそうです。少し変わった観点だなと感じるとともに、そこで使われていた「ArangoDB」に興味が湧きました。最近、「ArangoDB 3.0」が公開され、今の最新は3.1.1になり、機能を一新してできることも増えたようです。せっかくですので、インストールして触ってみました。

●ArangoDBについて
ArangoDBは非SQL型(NoSQL)データベースで、ネイティブでのマルチモデルデータベースとして、キーバリュー・ドキュメント・グラフデータの3種類のデータモデルを1つのシステムで提供するのが特徴になります。データを色々な構造で持てるDBのようです。

公式サイトには、
・ArangoDB with MongoDB (document store),
・Neo4j (graph database),
・OrientDB (multi-model database) ,
・PostgreSQL (RDBMS)

の4つのDBで検索速度の比較を行ったベンチマークも記載されています。
< https://www.arangodb.com/performance/ >

●インストール
主要なOSについては、インストーラもしくはパッケージが用意されています。
< https://www.arangodb.com/download/ >

ubuntu14.04なら下記手順でインストールできました。(2016/11/21時点)

# apt認証キーを登録して、
——————————————————————————
wget https://www.arangodb.com/repositories/arangodb31/xUbuntu_14.04/Release.key
apt-key add – < Release.key
——————————————————————————

# apt-transport-https モジュールが必要そうなので、インストール
——————————————————————————
sudo apt-get install apt-transport-https
——————————————————————————

# aptパッケージを追加してインストール
——————————————————————————
echo ‘deb https://www.arangodb.com/repositories/arangodb31/xUbuntu_14.04/ /’ | sudo tee /etc/apt/sources.list.d/arangodb.list
sudo apt-get update
sudo apt-get install arangodb3=3.1.1
——————————————————————————

●チュートリアル
インストールすると、「arangosh」のコマンドでMySQLやMongoDBのようにシェルが使用できます。
——————————————————————————
$ arangosh
——————————————————————————

arangoshell01
ログインしたときに書かれているように、コンソール上で「tutorial」と打ってみると(Type ‘tutorial’ for a tutorial or ‘help’ to see common examples)、コレクション(テーブル)の作成からドキュメント(レコード)の作成・更新・削除、arangoDBで使用できるAQL(Query Languege)の書き方まで、とても親切に導いてくれました。繰り返し「tutorial」と打つことでどんどん次へ進むようです。
以下は、チュートリアルから抜粋した例文になります。

# 登録
# usersテーブルを作成して、10人のユーザーを3の倍数のユーザーだけ active : true で登録する
——————————————————————————
127.0.0.1:8529@_system>
…> db._create(“users”);
…> for (var i = 0; i < 10; ++i) {
…> db.users.save({ name: “username” + i, active: (i % 3 == 0), age: 30 + i });
…> }
——————————————————————————

# 検索
——————————————————————————
db.users.byExample({ active: false }).toArray();
db.users.byExample({ name: “username3”, active: true }).toArray();
——————————————————————————

# AQLによる、より複雑な検索
# usersの全レコードに対してFOR文を回す
# MySQLのWHERE条件のようにFILTERが設定できる
# name と age を、 username と age という名前で出力
——————————————————————————
127.0.0.1:8529@_system>
…> db._query(`
…> FOR u IN users
…> FILTER u.active == true && u.age >= 33
…> RETURN { username: u.name, age: u.age }
…> `).toArray();
[
{
“username” : “username6”,
“age” : 36
},
{
“username” : “username9”,
“age” : 39
},
{
“username” : “username3”,
“age” : 33
}
]
——————————————————————————

# コレクション(places)とドキュメント(example1)を指定して更新
——————————————————————————
db._update(“places/example1”, { someValue: 23 });
——————————————————————————

# 検索結果を格納して、そのドキュメントに対して更新をかける
——————————————————————————
doc = db._document(“places/example1”);
db._update(doc, { someValue: 42 });
——————————————————————————

# 削除
——————————————————————————
db._remove(“places/example7”);
db.places.remove(“example8”);
——————————————————————————

デフォルトのデータベースは「_system」という名前だそうです。新しいDBの作成・削除をもって全20工程のチュートリアルを終えると、開発者様よりお祝いのメッセージを頂けます。チュートリアルで行っているのはドキュメント系のコマンド練習でしたが、その他にもたくさんの機能があります。以下に、少しだけその紹介を行わせていただければと思います。
●フルテキストインデックス
全文要素の設定を行うことで、フルテキストインデックスでの検索も行えます。
——————————————————————————
arango> db.emails.fulltext(“text”, “word”).toArray();
[ { “_id” : “emails/1721603”, “_key” : “1721603”, “_rev” : “1721603”, “text” : “this document contains a word” },
{ “_id” : “emails/1783231”, “_key” : “1783231”, “_rev” : “1783231”, “text” : “this document also contains a word” } ]
——————————————————————————

・AQLも用意されているとのことです
——————————————————————————
FULLTEXT(coll, attribute, query, limit) → docArray
——————————————————————————

●位置情報インデックス
緯度経度による位置情報インデックスも付けられます。ArangoDB上のAQLで以下のようなfunctionが用意されているそうです。

・近いもの検索
——————————————————————————
NEAR(coll, latitude, longitude, limit, distanceName) → docArray
——————————————————————————

・指定座標の周辺範囲検索
——————————————————————————
WITHIN(coll, latitude, longitude, radius, distanceName) → docArray
——————————————————————————

・長方形で検索
——————————————————————————
WITHIN_RECTANGLE(coll, latitude1, longitude1, latitude2, longitude2) → docArray
——————————————————————————

●グラフDBとして
グラフ構造でデータを作成し、パターンマッチングや最短経路探索も行えます。
(グラフデータはエッジと呼ばれるタイプのドキュメントで扱われ、エッジドキュメントはエッジタイプのコレクションに入れる必要があります)
——————————————————————————
arango> var Graph = require(“org/arangodb/graph”).Graph;
arango> g = new Graph(“graph”, “vertices”, “edges”);
Graph(“graph”)
——————————————————————————

●その他
まだまだご紹介しきれていない機能がたくさんありますが、まずはこんな面白そうなものがあるのかと興味を持っていただけたらと思います。
最後に、インストールを終えた時点で、http://localhost:8529/ にアクセスすると綺麗なWEBインターフェースを操作することもできることをお知らせいたします。Bootstrapを使用したシンプルなデザインが分かりやすく、弊社の連絡ツールとして使用している「slack」とも連携できるようです(下の画像の左下に、小さく#アイコンが表示されています)。これだけでも触ってみる価値がありました。皆様もぜひご一覧いただければ嬉しく思います。

install03
今後も盛り上がっていくであろう非SQL型(NoSQL)データベース。それぞれに得意な分野を武器として、うまく発展していくことを願っています。ArangoDBもそのひとつとして、どのように発展していくのか、動向に注目していきたいと思います。

タグ

サイト内検索

Copyright(c) 2016 IT-TERA All Rights Reserved.