6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オークファンAdvent Calendar 2018

Day 10

【OrientDB】6つのイイところ、7つのイマイチなところ

Last updated at Posted at 2018-12-09

はじめに

OrientDBを使用していてよかったところとイマイチなところが結構見えてきたので、イイところ悪いところをつらつら書きます

イイところ

Javaでできている

Javaでできているので、基本的にはプラットフォームに依存せずに環境を構築できる。
使用するメモリサイズなどもVMで調整ができる。

1. Luceneが使える

文字列の検索のための索引を、Luceneで作ったアナライザで作ることができ、検索もLuceneベースで行える。

2. グラフDBとして使え、ドキュメントDBのように柔軟

グラフ理論に基づく検索が可能。
テーブル定義を決め切らなくてもデータの挿入が可能。

3. データ操作するためのAPIが豊富

JavaでできているのでJavaAPIとの親和性は高いと思われます。

4. Gremlinが使える

グラフDBを標準的に扱うためのApache TinkerPop Gremlinに対応しているので、ほかのグラフDBと同じインターフェースを使って実装が可能。

5. メモリモードがある

メモリモードでDBを作成すると、DBインスタンスを突発的に作成することができる。

DBのサービスを落とすと消えるので、
単体テストとかに使える!!

6. Dockerがある

Dockerが用意されているので、Javaのバージョンとかを気にせずに環境構築が簡単にできる。

単体テストに使用しやすい!
マスターシステムではTravisCIで単体テストをする際に、Dockerで起動し、メモリモードのDBを作ってテストしています。
https://hub.docker.com/r/library/orientdb/

イマイチだったところ

1. マイナーバージョンのリリースがめちゃくちゃ早い

バージョン

3.0系

内容

http://orientdb.com/download-previous/
↑のページを見てわかる通り、月に2,3回バージョンが上がります。
バグが治っているのはいいことですが、追従していくにはかなりつらいと思います。

2. メモリ不足で落ちると復活しない

バージョン

3.0.8

内容

大量のレコードを検索した際にメモリ不足でOutOfMemoryが発生すると、その後、Insert を行ったりしようとすると、同じくOutOfMemoryInsertできない。

あと、Studioで大量のレコードを検索するSQLを実行して、OutOfMemoryが発生すると、レスポンスが返ってこず、操作できなくなる。

Java VMのヒープ領域の指定は起動スクリプト(server.batやserver.sh)内にありますが、2GBが初期値で入っているので、調整するにもここを修正する必要がある。

3. バックアップのリストアをすると、独自のLuceneインデックスが壊れる

バージョン

3.0.8

内容

バージョン変更を行う際に

  1. 旧DBの停止
  2. 旧DBのバックアップの作成
  3. 新バージョンのDBをインストール
  4. 新DBの環境設定
  5. 旧DBのバックアップを新DBへリストア
    D6. Bのサービスを起動する

の手順でバックアップをリストアしたときに、バックアップに含まれるインデックスが壊れ、Insertなどをしようとすると、例外が発生してデータの操作ができなくなる。

REBUILD INDEXすると解消するが、これも環境次第では結構時間がかかるので嫌ですね。

4. JavaAPIで書き込んでコミットしたはずがデータが登録されていないことがある

バージョン

3.0.8

内容

MDMの書き込みAPIで発生しますが、
POSTして、登録されたはずのデータが、GETしても取得できない時があり、DBにSELECT文を投げてみても取得できないことがある。

DB起動して最初のリクエストで起きやすいような感触です。

5. JavaのランタイムはJAVA_HOMEを見ている

バージョン

3.0.8

内容

Javaなので当たり前といえば当たり前ですが、JAVA_HOME環境変数をみて実行されます。

開発しているアプリケーションがJava10だったりすると、同一マシン上でOrientDBを動かしたりしたい場合には少し面倒。

違うバージョンのJavaで起動してしまうと、インデックスのリビルドをするときにエラーになったりする。

起動スクリプト内でJAVA_HOMEを参照して実行しているので、使用したいJavaのディレクトリに書き換えるなどするとよいかもしれません。

6. 検索がまあまあ遅い

バージョン

3.0.8

内容

Luceneクエリなどを使って検索をすると、まあまあ時間がかかります。

例はMDMのAPIのItemSourceのSearchです。

7. 悲観ロックできない

バージョン

3.0.8

内容

RDBMSなどであるようなSELECT FOR UPDATEみたいな機能は実装されていない(TODOにはなっている)。

悲観ロックできないので、トランザクション単位でのロックが難しく、処理フローなどを考慮しておかないと不整合が起きやすいかもしれないです。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?