3月1日、「 MongoDB Conference in Japan 」( 通称、mongotokyo)が開催されました。本稿では、日本ユーザーグループ「MongoDB JP 」の代表をやらせていただいている筆者から、イベントレポートをお届けします。
MongoDB Conferenceとは
MongoDB Conference は、開発元である10genが主催している国際カンファレンスです。10genのエンジニアが世界各地へ飛び回り、現地のMongoDBユーザーと複数の発表セッションを通じて交流を行う、非常にエキサイティングな催しです。
このConferenceは今までアメリカ、ヨーロッパを中心に行われていましたが、これまでアジアでの開催は一度もない状況でした。というのもMongoDB自身がアメリカ・ヨーロッパで爆発的に普及しているのに対して、日本ではようやく認知度が高まってきてはいるものの、foursquare のようにMongoDBを実サービスの中で採用している企業はまだ少数であるといった温度差があるからです。そういう背景もあり、またMongoDBの可能性を強く感じている筆者は昨年12月にMongoDB JP を設立し、MongoDB Conferenceのアジア初の日本開催を実現することを直近の目標に掲げて活動してきました。そしてそれが3月1日、mongotokyoとして楽天で行われ、現実のものとなりました。
120名以上の参加、質問の絶えない有意義なカンファレンスに
mongotokyoもその他のMongoDB Conferenceの流儀にしたがって、有料のカンファレンスとなりました。早期申し込みで$50、一般申し込みは$100と決して安いものではなく、かつ年度末の平日開催ということで、どれだけの人が集まるか非常に不安なところがありました。しかしgihyo.jpにおける告知記事 の掲載等のおかげで、120名以上の方に参加していただけました。さらに、たくさんの楽天の社員の方々にも足を運んでいただき、大盛況の結果となりました。
また、各セッションの発表後には質問が絶えず、非常に有意義な場となりました。多くの参加者にMongoDBが切り開く可能性を感じてもらえたと思っています。
今後ともMongoDBの活動を精力的に行っていきます
mongotokyoはMongoDB JPとしての1つのゴールでありましたが、また同時に今後日本で盛り上げて行くためのスタートでもあると思っています。今後とも勉強会やドキュメント整備 、ユーザーサポートや記事執筆など、活動を精力的に行っていきたいと考えています。また、その後中国でも行われたmongobeijingでは無料とは言え、mongoSVに並ぶ500名規模の参加者があったようで、アジアでの交流なども行えればと思っています。
セッションレポート
ここからは各セッションに対するレポートをスライドとビデオと共に行っていきます。
1.「Welcome to Mongo Tokyo and Introduction to MongoDB」
最初にRoger Bodamer 氏(SVP, Products & Engineering, 10gen)より、MongoDBのイントロダクションが行われました。MongoDBがNoSQLの中でもどのような位置づけであり、世界での利用状況はどの程度であるのかに始まり、特徴的な機能が紹介されました。現在毎月120,000のペースでダウンロードがあり、爆発的に普及が進んでいるとのことです。この数字には驚きました。
2.「Replication and Sharding」
続いてAlvin Richards氏(Senior Director of Service & Enterprise Engineering, 10gen)より、MongoDBの最も特徴的な機能と言っても過言でない、ReplicationとShardingというスケーリングに関する詳細な発表がありました(資料はこちら ) 。
MongoDBはReplica Setを構成することで、現在マスターとなっているサーバーの障害時に自動的にスレーブをマスターに昇格させて機能を維持する、フェイルオーバーという機能を持った複数台のレプリケーションを構成することができます。また、スレーブ側からも読み込みを許可することできますので、レプリケーションを増やすことで、読み込みに関してスケールを行うことができます。さらに、Shardingを構成することで、データを特定のキーに従って複数のサーバーにデータを分散して配置することができます。しかもキーさえ指定すれば自動的にデータの分配ルールを構築してくれ、またシャード間でデータのバランスが崩れてきたときには自動的にバランシングを行ってくれまる便利な機能を備えています。これにより、書き込みに対してもスケールを行うことができます。Alvin氏はこのReplicationとSharding機能の詳細を説明しました。
ここまでの内容(冒頭、1分強ほど欠けています)
上記質疑応答(録画できた部分のみ)
3.「Schema Design」
再びRoger Bodamer氏にバトンが渡り、MongoDBにおけるSchema Designが説明されました。MongoDBはスキーマが自由に設計できますが、逆にそれがどのようにスキーマを設計すべきなのか、悩ましく思っている人も多くいます。例えば1つのコレクションの中に様々なリレーションを押し込むべきなのか、またObjectIDの参照を使うことで複数のコレクションにわけるべきなのか、また後者の場合にはどうのようにしてコレクション間の参照を行うのか、さらにはMany to Manyの設計についてなど、ドキュメントには詳しく書かれていない詳細な内容も説明されました。とても貴重な機会であったと思います。
4.「You're Happy When You Choose Ruby and MongoDB」
続いて日本のセッションに入りました。まずはYunna Kurita さんからMongoDBとRubyの幸せな関係について発表していただきました。
趣旨: MongoDBとRubyの幸せな関係:RubyからMongoDBを扱う時には、目的に応じて適切なアーティテクチャーの選択をしないといけません。ドライバーの比較からはじめ、RailsとMongoDBの関係、Geo情報の扱い、Hadoop Streamingの利用時などのTipsと、Rubyっぽい「黒魔術」なMongoDBの利用法のお話をします。
MongoDBのRuby(Rails)ドライバはたくさんの種類があります。利用用途に応じてどのドライバを使うべきなのかを詳しく説明されました。これは非常に貴重な資料だと思います。また、レセプトデータと呼ばれる医療用のデータをMongoDBに格納していくための方法が紹介されました。レセプトデータは項目の数が不規則であり、かつ人間が手入力で行うため、記入欄や項目の順番の前後があり、電子データとして扱い解析を行うのは非常に面倒です。それをMongoDBの柔軟な機能をうまく利用し、また統計解析ソフトRでの解析に繋げるためにHadoopStreamingを行うなど、テクニカルに解決されたとのこと。医療データはMongoDBが活躍できる分野だと感じました。そのほか、DBに格納する前にプライバシー情報の保護をどうしていくかがポイントであることに言及されていました。
5.「Social Data and Log Analysis Using MongoDB」
筆者 (芸者東京エンターテインメント株式会社(GTE) ・MongoDB JP主催者)もログ解析におけるMongoDBの活用方法について発表させていただきました(資料はこちら ) 。
要旨: ソーシャルデータの解析データサーバーとしてのMongoDBの活用方法をお話しします。アクセスログ・行動ログ・ユーザー属性情報などの各種ログをMognoDBへ集約させる方法、またHadoop,R,JQueryなどの他のツールとの連携のさせ方を具体的にお話しします。
アクセスログをMongoDBに保存しておき、MapReduceを利用してUserID、User Agentなどの項目をキーにして各URLのPVとUUを計算する方法を具体的に紹介しました。また、現状のMapReduceの問題と次期バージョンの新機能などについて触れ、MongoDBのMapReduce機能についても理解していただけたと思います。次にMongoDBに格納データを取り出し、WebUIやRで解析を行っていく部分についての話をしました。MongoDBのREST機能を用いることで、フロント側から直接MongoDBにリクエストが行え、JSONの形式で受け取ることができます。この機能を利用して別途スクリプトを作成することなく、JQueryによる描画を行ったり、R用のオブジェクトに変換して利用方法などを説明しました。解析データサーバーとして、MongoDBは非常に強力な相棒となってくれていると筆者は強く感じています。
6.「MongoDB as a Search Engine Document Repository」
Kazuki Ota さん(株式会社 Preferred Infrastructure CTO)からは、Sedueと呼ばれる大規模検索エンジンのドキュメントレポジトリとしてのMongoDBの活用事例を発表していただきました(資料はこちら ) 。
要旨: 分散検索エンジンSedueではMongoDBをドキュメント保存用のリポジトリに使用しています。MongoDBを選択した背景や理由、採用するに当たって苦労した点、そして大規模化にむけたSharding性能実験等を紹介したいと思います。
実プロダクトへの導入事例として非常に貴重なセッションになりました。SedueのドキュメントレポジトリとしてMongoDBをMaster-Maseterで構成し、またDFSとしてMongoDBのGridFSという機能を利用しているとのことです。さらに格納しているドキュメントのスキーマやクエリについても具体的に説明されました。またPFIの方々はMongoDBの開発に関しても貢献しており、たくさんのissueを解決しています。この取り組みには脱帽しました。
最後にSedueでの利用の際に生じた現状のMongoDBの抱える様々な問題について紹介されました。非常に具体的な内容でとても勉強になるセッションでした。
7.「Kiosk: The Schema Layer for MongoDB and PHP - Schema is Not Your Enemy」
Basuke さん(関心空間CTO)からはPHP用のKioskライブラリについて発表していただきました(">資料はこちら ) 。
要旨: MongoDBの手軽さにRDBの確実性をプラス!スキーマがないことが魅力のMongoDBですが、実際のコーディングでは、これまでRDBがテーブルとして提供していた枠組みがなくなるデメリットも出てきます。PHPのような型の概念の薄い言語ではなおさらです。PHP用のKioskライブラリは、オブジェクトとMongoの間のゆるいスキーマレイヤーを作ることを目的としています。
スキーマの設計が自由であることと、そうでないことには一長一短があります。例えばスキーマフリーだとスキーマ構造の把握が難しいのが欠点です。そこでライブラリ側で緩いスキーマを定義してやることでデータ構造の把握やMySQLからのマイグレーションを容易にするすることができます。非常にわかりやすい説明とデモもあり、とても有意義なセッションでした。今後、実案件として増えてくるかもしれない、MySQLからMongoDB(NoSQL)へのマイグレーションを行う際にとても役立つ発表でした。
8.「Node.js and MongoDB」
Suguru Namura さん(株式会社 サイバーエージェント)からはnode.jsとMongoDBという、非常にホットな発表をしていただきました(資料はこちら ) 。
要旨: アメーバピグで作っているPC向けソーシャルゲームをnode.js+mongoDBで作っているので、node.js+mongoDBのメリットと開発経験談、工夫したポイントなどをお話しします。
現在作成中のソーシャルゲームにも導入しており、その具体的な話を聞けるということで貴重なセッションになりました。MongoDBとnode.jsが非常に相性の良いことをnode.jsの特徴と具体的なソースとともに説明されました。また、MongoDB 1.8.* という現在の安定バージョン1.6.5よりも最新のバージョンで色々検証されているのも非常に参考になりました。そして、アメーバピグの管理コンソールのデモンストレーションは非常にエキサイティングでした。是非ともビデオでご確認ください。
まとめ
10genエンジニアと、日本側の著名なエンジニアを迎えてのmongotokyoは最後の懇親会まで終始エキサイティングなものでした。
今回のカンファレンスをきっかけに、実際にサービスに導入してみようと思われる人が増えていくことを期待しています。興味をもたれた方はまずはMongoDB JP に加入していただき、定期的に開催予定のMongoDB勉強会に是非足をお運びください。次回の勉強会の開催は3月26日(土)を第一候補として開催準備を進めています。