レポート

「第3回 MongoDB 勉強会 in Tokyo」活動報告

この記事を読むのに必要な時間:およそ 4.5 分

@bibrosさん「ソーシャルアプリのプロトタイプ制作にMongoDBを活用」

画像

@bibrostさんより,ソーシャルアプリのプロトタイプの制作を用途として"MongoDBを活用しましょう"という趣旨の発表がなされました。

ソーシャルアプリなどの現場では初期段階でスキーマを定義するのは難しく,途中のレビューで変更が多々加えられてしまうので効率が良くないと指摘。そこで,最後RDBなどで実装することは決まっている場合でも,プロトタイプ段階ではスキーマフリーなMongoDBを活用して行き,ある程度スキーマが固まった時点でRDBへマイグレーションを行なってはどうか,というアイデアが紹介されました。つまり,MongoDBは粘土であり,様々に姿形を変えながら最後はRDBという金型に流し込むイメージです。

この話には,筆者を含め非常に多くの方が頷いている様子でした。あくまで最終的にはRDBを採用するにしても,その過程の段階ではMongoDBを活用するというのは非常に理にかなった使い方のように見えました。もちろん,いつMongoからRDBへの以降を決めるか,その際のマイグレーションをどううまくやるかの課題はありますが,それでも試して見る価値はありそうですね。

画像

また,具体的にRestインターフェースであるsleepy.mongooseとPHPを利用した具体的なコード例も示されました。最後に,MongoDBのユースケースが紹介されました。これは,非常に的を得た図であるように思います。

画像

筆者の話でもありましたが,高性能を維持する代わりに書き込みの欠損が生じるなど,多くの信頼性の問題を含むMongoDBですので,決済系やユーザーの重要な情報を保持する場合には今のところあまり向いていません。逆にキャッシュのように多少のデータロストが許される場合や,RDBやテキストなどにデータのマスターが別にあり,再現性のあるアクセスログなどのデータに対してはMongoDBはその柔軟性を活かして活躍できるという話でした。これについても,非常に多くの方が納得しておられました。

全体の感想

実際のWeb開発の現場の視点から述べていただき,非常に多くの気づきが得られました。現場においてMongoDBをどう使用するべきか,という今回の主要テーマは今後MongoDBを導入しようと考えられている方にとっては大きな参考となる内容でした。僕としては「MongoDBは粘土であり,RDBは金型」という表現が非常に気に入りました。

最後に本レポートとは関係ありませんが,@bibrostさんのブログエントリモテるMongoDB女子力を磨くための4つの心得は秀逸ですので,あわせてご覧ください。

@matsuou1さん「MongoDBチューニング〜スロークエリ撲滅までの道筋〜」

画像

@matsuou1さんより,MongoDBのクエリチューニングという,世界でもまだ紹介事例の少ない内容で発表していただきました。

MongoDBのクエリチューニングについて実行計画と,それに使用するコマンドについて詳しく紹介されました。このあたりの話は本家MongoDBドキュメントでも記述が少ないところですので,非常に良く調べられたのだという印象を受けました。

画像

実際,MongoDBのスロークエリ特定方法は以下の3つがあります。

  1. slowmsコマンドラインオプションをつけて起動する
  2. db.setProfilingLevel(level,slowms)コマンドによって設定する
  3. 実行中のクエリを実際に確認する

これらの特定方法の基本的な使い方を丁寧に説明されました。それぞれの特定方法のメリット・デメリットがまとめられた表は非常にわかりやすかったです。

画像

全体の感想

筆者自身もクエリチューニングをここまで本格に行ったことがなかったので,とても興味深く発表を聞かせていただきました。一見難しそうに見えるMongoDBのクエリチューニングですが,@matsuou1さんのブログからお言葉をお借りしますと,

私の結論としては,MongoDBではRDBMSとほぼ同じチューニングのアプローチ方法が取れます。RDBMSでチューニング経験がある人は,違和感なくやれると思います。

むしろ,JOINがない分,簡単かと。ただ,バックエンドで使う分には十分な方法が提供されているが,フロントエンドで使うには,実行回数が多い&ちょっとだけ遅いクエリを特定する方法が現状ないので,注意して見て行く必要があります。この辺りは今後のバージョンアップに期待しましょう。

とのことです。筆者も一度このスライドを参考にしながらスロークエリを調べてみたいと思います。

著者プロフィール

井上敬浩(いのうえたかひろ)

MongoDB JP主催者。MongoDB日本語ドキュメント訳もしています。芸者東京エンターテインメントGTE所属(データマイングエンジニア)。Hadoop,MongoDB,GraphDB(Neo4j),Redis等を使用して,大規模かつ複雑なソーシャルデータの解析を行っています。解析技術においては業界一を本気で目指しています。

Twitter:@doryokujin