ちょっと前に実施された Survey に回答したところ、本日、ArangoDB の真新しい T シャツを受け取ったので、謹んでご報告します。
応募者が少なかったのか、はたまた、本当にラッキーだったのかは不明ですが、思った以上にハイクォリティな T シャツと、手書きのクリスマスカードが同封されていて素直に嬉しいです ;-)
ArangoDB はとてもいいプロダクトだと思うのですが、なかなか人気に火がつかないようで、今回の Survey もなんとか注目を集めようという施策の一環ですね。
あまり語れるほどの経験はないですが、T シャツ貰ってしまったので、ArangoDB についてちょっと触れておきます。
特徴
いわゆる一つの NoSQL です。AQL と呼ばれる専用のクエリー言語が用意されています。AQL では JOIN やトランザクションもサポートしているので、比較的シンプルな業務アプリであれば、移植する場合の敷居は高くないと思います。
また、グラフ関連の API も用意されているので、その手のデータ構造もモデリングすることが可能です。ArangoDB ではこれを「マルチモデル」と呼んでます。サービスが成長するに従ってソーシャル的な要素が招聘され、結果としてグラフ 用の DB が別途必要になる、という流れを見越しているわけです。ArangoDB なら最初から全部入ってるよと。
特筆すべきなのは、Foxx と呼ばれるマイクロサービスを構築するための仕組みです。Foxx を使うと JavaScript で Web サービスを記述できます。Foxx アプリからは当然 ArangoDB のデータを直に触ることができるので、ターンアラウンドタイムの面で経済的です。その分、密結合になりますが、そこは開発のスピード感と効率性を求めるのか、パフォーマンスを犠牲にして疎結合で綺麗に分離してロックインを避けたいのか、というトレードオフです。
私のところでは使ってませんが、レプリケーションもサポートしています。
パフォーマンス
基本メモリに全部乗せなので、速いです。書き込みについては、同期、非同期などオプションを選択できます。定期的に名の知れた NoSQL との比較テストを実施しているので、その内容を参考にすると良いでしょう。個人的には、必要にして十分なパフォーマンスを叩き出していると思います。
ただし、Foxx の戻りは結局 JSON なので、コレクションを丸っと返すみたいなことをすれば遅いです。一度に取得する上限を決めて、必要になったら都度取りに行くというありがちな対策が最低限必要になります。
マイナスポイント
Foxx アプリのデバッグのし辛さにつきます。ローカルに ArangoDB をインストールしてしまえば良いのですが、基本はデプロイして動作確認しての繰り返し。単体テストは外から API 叩くしかなく、内部にブレークポイント置けないのがもの凄くストレスフル。
ここは何とかしてほしいところ。それ以外のところでは、特に不満らしい不満はないです。
まとめ
- ArangoDB はなかなか良いプロダクト
- 少人数でスピード重視で回さないといけないところにはハマる可能性あり
- 結構頻繁にアップデートされ、よくメンテされている印象
- もっと人気出てもいい(というか来年こそはブレイクする?)