もはや、どのようなアプリケーションにも必須と言っても過言ではないデータベース。
システムで採用するデータベースの選択は、悩みどころのひとつです。
今回は、db-engines.comのDB-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よりもシェアは若干上です。
検索エンジン特化ということで使いどころは限られますが、その分使いどころがわかりやすく、迷わずに導入を決められるメリットがあります。
まとめ
世界に数多くあるデータベースは様々な特性を持っており、的確に使えば非常に強力な基盤となってくれますが、反面、使い方を誤ればたちまちシステムを汚染する毒と化します。
データベースソフトウェアは、アーキテクチャのなかでも非常に重要なものです。後々他のものにマイグレーション出来なくもないのですが、移行コストも非常にかかりますので、初期段階で時間を掛けてでも吟味を重ね、盤石の体制を整えてから開発に入るのがよいでしょう。