MySQLな人から見たMongoDBのデータの持ち方比較

Nodeでアプリ作ってて、DBどうしようか迷ってたら、どうもMongoDBが相性が良いらしいと言われているようなので調べてみた。
自分はMySQLしかほとんど触ったことがないので、MySQLと比較して特長をつかんでみる。
とりあえずはデータ構成の比較。

データの持ち方

MySQL DB テーブル    レコード
MongoDB DB コレクション ドキュメント

大きくは変わらないですね。
テーブルが「コレクション」、レコードが「ドキュメント」という位置づけになるようです。

定義

MySQL いる
MongoDB いらない

MongoDBは、DB、テーブル、カラムのスキーマ定義はどれも不要です。
データの追加時(Mongoでの追加はsaveコマンド)に、

  • 選択したDB
  • 追加対象としたコレクション(MySQLで言うテーブル)

が無ければ、勝手に作ります。


例えば、DB「mydb」のコレクション「mytable」に値を保存するコマンド
MongoDBにもMySQLクライアント的なものがあり、このコマンドはその中で発行するものです。


use mydb;
db.mytable.save({ name : "My Name", age : 1})
これを発行した時点で、もし「mydb」が無ければ作り、また「mytable」が無ければ同じく作ります。

また、ドキュメント(MySQLでいうレコード)のスキーマは、保存したデータそのものに埋め込まれます。

データ操作

MongoDBも「クエリ」での取得を行います。
ただ、MySQLほど高機能ではありません。

結合して取得 トランザクション
MySQL あり あり
MongoDB なし なし

やっぱり速度的な部分で勝るだけあって、機能的には少ない部分はありますね。
MySQLから移るという選択肢じゃなく、併用したり製品によって(お堅くいくならMySQLとか)選んでいくものかもしれません。