こんにちは。東京アプリケーションシステムのK.Nです。
みなさんはMongoDBをご存じでしょうか?
MySQLのようなリレーショナルデータベース(以下RDB)と比べ、MongoDBはドキュメント指向データベースであるため様々な違いがあります。
ここでは私が実際に業務を通して感じたメリットとデメリットを紹介します。
メリット
-
スキーマレス
スキーマの定義をきっちりと行うRDBとは異なり、ドキュメント指向データベースはスキーマレスのため、1つのコレクション(RDBで言うテーブル)内のデータが異なる構造を持つことを許容します。
仕様等の変更でデータの構造を変えたい場合や限定的なデータを用意したいとき、RDBであればDBにスキーマの変更が必要となりますが、スキーマレスであればその必要はありません。頻繁に機能追加が行われるようなシステム開発と相性の良い柔軟性を感じることがありました。
-
JSONとの相互変換
MongoDBではJSONに似たBSONというデータを、ドキュメント(RDBで言うレコード)として使います。一部のデータタイプの違いはあるようですが、概ね同じです。そのため、相互変換が容易という特徴があります。業務では、JSON形式で送られてくる画面からのパラメータを、サーバー側で変換をかけてMongoDBに登録するというパターンが良くありました。階層的な構造を持つデータでも簡単にDBに落とし込めるので、「これはRDBだと大変だったろうな…」と思いつつ開発するようなこともありました。
デメリット
-
管理の大変さ
スキーマレスに見られるように、自由であることがすべてにおいて良い影響を与えるとは限りません。
1つのコレクション内のデータが異なる構造を持つことを許容する関係上、データの重複管理や欠落の発生についてのリスクがあります。そのリスクに対処するため、コレクションの定義書等の入念な管理が必要になりますが、システムが肥大化すればするほど開発チーム全体への周知や共有が大変になっていきます。特に複数の開発チームが動いているような案件の場合、統一性の確保が難しく感じました。
如何でしたでしょうか。
完全で万能なDBは存在しませんが、用途に適切なDBを扱えば多くの利便性を享受できることと思います。
システム開発におけるDB選択では、それぞれのDBの特性を良く理解することが大切です。