データベースの適切な選択のために

 もはや、どのようなアプリケーションにも必須と言っても過言ではないデータベース。

 システムで採用するデータベースの選択は、悩みどころのひとつです。

 今回は、db-engines.comDB-EnginesRankingを参考に、世界シェア上位からいくつか抜粋してご紹介したいと思います。

データベースの特性を知る

 当然ですが、データベースの種類ごとに異なる特性があります。後々の開発に失敗しないためには、どれにどんな特性、特徴があるかを知っておかなければなりません。

RDBMS (Relational DataBase Management System)

 言わずとしれた最もポピュラーなDB。SQL文といった専用の簡易言語を使うことで、複雑なデータ取り出しを可能にしたほか、トランザクション制御により、テーブル間の整合性を保つことを得意としています。

RDBMSの代表的なソフトウェア

Oracle Database

 商用データベース化では最も使われている有名製品。しかし最近では、製造コストを削減するため、採用が見送られるケースも多くなってきたようです。

 いくら商用とはいえ導入コストに数十万円~、ランニングコストに数万円と安くありませんから、コスト削減策を打ち出している企業は他のOSSなどを選択してもおかしくありません。

 また、最近ではMySQLなどの他のデータベースソフトウェアと比べても、パフォーマンスが悪かったりバグが多いという話も出ていますから、長らく君臨してきた世界シェア1位の座から退くのも、遠い未来ではないかもしれません。

MySQL

 オープンソース界の寵児。LAMPにも組み込まれているポピュラーなソフトウェアです。

 世界シェアは2位で、常にOracleやSQLServerとその座を争ってきました。最近は、JSON型をサポートしたりと、最新の技術動向をうまく取り入れています。

 Oracleなどの高額な商用データベースソフトウェアと比較しても遜色なく、むしろ優れている点も多くありますので、有力な選択肢のひとつとして挙げられます。

NoSQL

 NoSQLは、”Not only SQL”といった意味で使われるデータベースソフトウェアです。SQL文を使用したスタンダードなデータベースに比べ、特定の用途に特化した作りになっており、その分高速なアクセスや、優れた拡張性を持つものが多いです。

NoSQLの代表的なソフトウェア

MongoDB

 MongoDBは、JSONをそのまま格納したようなデータベースです。javascriptやNode.jsなどの普段からJSONに触れている方はイメージしやすいでしょう。

 MongoDBは、RDBMSとは違い、トランザクション及びリレーション(JOIN句など)機能を持ちません。それと引き替えにスケーラビティと速度を得ているわけです。

 つまり、複雑なJOINや正規化が必要なシステムは、RDBMSを利用するべきであり、MongoDBをはじめとするNoSQLを使うべきではありません。

 しかし、RDBMSのようなデータベースをメインに据えた上で、例えばユーザーの個人設定を貯留しておくドキュメントストアとしては、有力な使い方が期待できそうです。

 他に、ゲームのアイテムや装備情報など、ユーザー毎に膨大なデータ管理を担うデータベースとしても有効です。

Redis

 Redisは、KeyValueストアと呼ばれる非常に単純な構造を持つインメモリデータベースです。前述したような複雑な用途には向きませんが、驚くほど高速なレスポンスを返してくれるのが特長です。

 例えば、一定の間隔でランキング情報を更新し、それをRedisに格納、複数のサーバーで使い回す…といった使い方が有力です。検索を行うような操作には不向きですが、データベースから値を取り出すという一点においては最速級のパフォーマンスでしょう。

ElasticSearch

 独自の検索機能を作成したい場合(ショッピングサイトなど)に最適なデータベースです。Facebookやgithubなどでも導入実績があり、同じようなデータベースのSolrよりもシェアは若干上です。

 検索エンジン特化ということで使いどころは限られますが、その分使いどころがわかりやすく、迷わずに導入を決められるメリットがあります。

まとめ

 世界に数多くあるデータベースは様々な特性を持っており、的確に使えば非常に強力な基盤となってくれますが、反面、使い方を誤ればたちまちシステムを汚染する毒と化します。

 データベースソフトウェアは、アーキテクチャのなかでも非常に重要なものです。後々他のものにマイグレーション出来なくもないのですが、移行コストも非常にかかりますので、初期段階で時間を掛けてでも吟味を重ね、盤石の体制を整えてから開発に入るのがよいでしょう。