VNCTST games 開発日誌

ゲーム開発日誌

clojure向けの組み込みデータベースの選定

今回は、「clojureから使える組み込み型データベース」をリストアップし、その中から自分の用途に合ったものを探し出した。

なんで必要か

これまでの流れ

  • 毎月2回、試作ゲームを作って公開するという事となった

  • 二月後期の試作ゲームを作る必要がある。どんな内容にする?

  • 二月後期の試作ゲームは、これまで作るのを避けていた「サーバサイドでデータを保持する、オンライン要素を持つゲーム」と決まった

  • なんで、これまで避けていたのかというと、オンラインゲーの宿命として「サービス終了したら遊べなくなる問題」がある為

    • これは大手だけの話じゃなく個人開発でもそうで、サーバサイドの要素を持たないブラゲであれば、仮に提供サーバのメンテがされなくなったとしても、ブラウザからロードできるファイル一式をサルベージできれば、そのゲームを他のサーバ等に設置して遊ぶ事はできる。ここでもしサーバサイドの要素がある場合、サルベージは絶望的になる。
    • 今回オンラインゲーを作るにあたって、この問題をどうにかしたい
  • 上記について考えた結果、以下のような結論となった

    • 「httpサーバ込みのuberjarを作れば、サービス終了後でもjarを配布する事で、一応遊べる事が保証できる(セーブデータの別サーバへのエクスポート/インポートについては各ゲーム側での対応としたい)」
  • 上記の対応の際に問題になるのは、データストレージ部

    • ここは普通ならrdbmsやらnosqlやらを使う部分だが、jarがどんな環境で起動されるか分からないのなら、外部プロセス型のデータストレージではなく、組み込み型のデータストレージを選ばなくてはならない。
    • 今の作りかけのコードではmariadbとredisを使っていたが、どちらも外部プロセス型なので、他のストレージエンジンを検討しなくてはならない
  • まず最初にdatomicを検討した

    • 無償版でもローカルファイル書き出しができ、再配布も可能という事で最有力候補として試していたのだが、ライセンスをよく見るとなんか複雑で、将来に運用方針を変更(例えば、有料販売する等)した際にも使い続けられるか非常に不安があるので、とりあえず今回は見送る事にした。有償版ライセンスを買える金はない。

そういう訳で今回は、「組み込み型データベース」の候補をリストアップし、その中から自分の用途に合うものを選ぶ事にした。

  • 本当は、実際に使ってみた結果等も含めて記事にするつもりだったが、量が結構多くなったので、一旦ここで分ける事にした

選定条件

  • 外部プロセスを起動しない、いわゆる「組み込み型」のrdbms/kvs/nosql/dbmの類である事

  • JVM上で動く事(clojureからアクセスできる事)。また、JNIとかは不可(cpuやosに依存しない事)

  • ライセンス回りの確認

    • 無償もしくはごく安価で使える事
    • 生成したバイナリ(jar)の再配布ができる事
    • ソース開示条件が付いてない事(要はGPL系不可)
  • SQLはもううんざりしているので避けたい

  • 実際のデータストレージ先は、ローカルファイル1~3個ぐらいであるのが望ましい

    • オンメモリのみ(プロセス終了→再起動でデータを引き継げないタイプ)は不可
    • ディレクトリ掘って大量にファイルを生成するタイプのも避けたい
  • 扱いが簡単である事。複雑な操作が必要なものは筆者の手には負えないので不可

候補

後日、mapdbを試した結果を別記事として書いた。