ArangoDB

ArangoDBご紹介

ArangoDBとは

NoSQL + Graph + KVS を扱えるオープンソースデータベースです
(Three major NoSQL data models in one open-source database.)

サイトは
https://www.arangodb.com/

使用した経緯

とあるネットワークゲーム(もうサービス終了してるけど)のログサーバーとして当初はメジャーなMongoDBにしようとしたらしいけど、発注元からライセンス的にNGをもらった関係で調べた限りこれが良さそうってことでお伺いをかけてライセンス的に問題ないとのことで採用したらしい(更にその後MongoDBでもライセンス的には問題なかったらしいと分かるんだけど・・・)。
で、使用するのは決定したけど、諸々の理由でだれもログ周りを作業しなかったので仕方なく私が調べ始め&色々調べるうちに私的にはとっつきやすかったので今回ご紹介。

今回紹介するところ

NoSQL + Graph + KVSのNoSQLの部分です(GraphおよびKVSは使わなかったので紹介できませんw)

インデックス貼れます

データベースでもデータ検索の際インデックスないととても遅いのですが、ArangoDBでもインデックス作成できますのでデータ大量にあっても安心です(ただしメモリは当然いっぱい使いますw)

WebInterface

ArangoDBインストールすると使えます。だいたいのことはできます(コレクション作成とかインデックス作成、データ追加などなど)
https://docs.arangodb.com/3.1/Manual/Administration/WebInterface/

CURLでCRUD

CURLで操作することは無いと思いますが、できますよって言うことで下記を参考にしてください(下記にあるAQL部分もありますが)
https://www.arangodb.com/tutorials/arangodb-crud/

AQLで操作する

AQLとは

ArangoDB query languageの略、いわゆる一般的なDBで利用されるSQLみたいなものです。
SQLとの比較表があって分かりやすかった。

MongoDBとの文法比較
https://www.arangodb.com/tutorials/mongodb-to-arangodb-tutorial/
私的にはMongoDBの集計周りが非常にとっつきにくい感じなのでAQL素敵

SQLとAQL比較表は
https://www.arangodb.com/why-arangodb/sql-aql-comparison/
SQLの基本的なことはほぼほぼできるので安心(JOINもできるしGROUPもできるし安心倍増)

AQLでデータ取得したい

CURLでも操作できますが、WebInetrfaceで実行できますし、ほぼほぼ何らかの言語上でログデータ取得時に使用するかと思います。私はWebInterfaceでちゃんとデータ取ってこれるAQL作成までしてから各プログラムにコピペしてました。

各言語でのドライバ

ほぼほぼメジャーどころの言語用のドライバが存在します
https://www.arangodb.com/arangodb-drivers/

Fluentdとの連動

運用したのがログサーバーなので特定のところにログを吐き出してそれをFluentD経由でArangoDBにデータを突っ込んでおりました。
使用したFluentd Pluginは
https://github.com/tamtam180/fluent-plugin-arango
でした

本格運用で躓いたこと

ファイルオープンに引っかかる

コレクションのジャーナルサイズをデフォルトのまま運用してた(32MBで1ファイル)ので、ファイルオープン数が多くなりLinuxでの制限に引っかかってしまいました。設定でファイルオープン数の値変更できたため対処はできたのですが、コレクションごとのジャーナルサイズをちゃんとしたほうが安心です
※ArangoDB2系では4096がデフォルトファイルオープン数だった気がしますが、3系からデフォルトでもかなり大きい値になってたはずなので気にすることはないかもしれません

インデックス貼り

メモリ多く使ってしまいますので貼りまくりには注意。またArangoDBのインデックスにはskipindexとかhashindexとかありますので、適切なのを貼ってあげてください(私の場合はskipindexだけで事足りた)
またインデックスを貼ると、再起動時にインデックスデータ作成のため時間かかりますので注意する必要があります。

CORS

ブラウザからJavaScriptでデータ取ってきたいときには気をつけましょう&私が調べた限りでは起動時のオプションでしか設定できないようなので注意(もし再起動無しで設定できるなら教えて!!!)

あとがき

勉強方法

チュートリアル制覇するのが手っ取り早いです(私もチュートリアル制覇して理解していきました)
https://www.arangodb.com/tutorials/

他に色々できます

レプリケーション
クラスター
Webアプリ(ArangoDBではFoxx Frameworkって言うらしい)
https://docs.arangodb.com/latest/Manual/Foxx/index.html
もできます

性能比較

https://www.arangodb.com/performance/

Tシャツ欲しい

欲しい、とても欲しい。
https://www.arangodb.com/community-survey/
でアンケート答えるともらえるらしいけど、日本まで送ってくれるのかとか費用どうなるのかとか思って数年躊躇w

余談

どうしてアボカドのアイコンなの???

最初はAvocadoDBっていう名前だったんだけど、他のアボカド愛好家の法的問題を避けるためにメキシコ/グアテマラで「アランゴ」と呼ばれる品種に変えたようです・・・本当です!
https://www.arangodb.com/2012/05/avocadodb-become-arangodb/