MongoDB Tokyo 2013で語られた、NoSQLを上手に使うためのポイントとは
オープンソースのNoSQLデータベースであるMongoDBのイベント「MongoDB Tokyo 2013」が12月12日、秋葉原にある富士ソフトアキバプラザにて開催された。
10月には1億5000万ドルもの資金調達を受け、NRIによるサポートサービスが12月から開始されるなど、活発な活動を続けるMongoDB。来日したスタッフによるセッションや、国内企業で使用しているヘビーユーザーからの利用事例の紹介など、充実した内容で行われた。
Ian Daniel氏によるキーノート
MongoDB社のテクニカルサポートマネージャーであるIan Daniel氏によるキーノートでは、はじめに日本での活動として、ユーザーコミュニティの「MongoDB JP」に750人以上が登録していることや、「丸の内MongoDB勉強会」で約50名のエンジニアが日々研究していること、2014年にはオープンソースカンファレンス(OSC)への参加を予定していると話した。また、ワールドワイドではダウンロード数が500万を超えており、MongoDB Universityというオンライントレーニングには10万人強が登録、ユーザーコミュニティには2万人以上が参加していることも紹介された。
NoSQLデータベースとMongoDBの動き
これまで、40年間にわたって使われているリレーショナル・データベースは過去50年間で最も成功したソフトウェアテクノロジーとDaniel氏は語る。これまで長きにわたってRDBは発展してきたが、ここ5年くらいでそれに対抗できるようなものが出てきた。
こうしたデータベースの歴史や、携帯電話など進化の著しい機器を紹介しながら、いつまでも古いツールを使い続けているのではなく、時代に合わせた新しいツールを使うことが重要だとDaniel氏は述べ、MongoDBの可能性をアピールした。
また、MongoDBの成功事例を2つ紹介。スケジューラのような機能を持つメールアプリの「Mailbox」では、プロトタイプの開発時より、MongoDBをデータストアとして利用している。このアプリはリード&ライトの負荷が高く、ダウンタイムも許されないものだが、MongoDBを使うことでスムーズな動作を実現している。
有名な大手保険会社のMetLifeでは、社内システムでMongoDBを使用している。RDBでデータを一元管理しようと苦労していたが、MongoDBを使うことで柔軟なデータモデルを構築することができたため、90日という短期間でプロトタイプを完成させることができ、本番環境に移行したという。
Webサイト上でも、かなりの数のコンテンツが日本語に翻訳されている他、前述したMongoDB UNIVERSITYでは、「M101P」というPython向けのトレーニングコースを全て日本語で受けることができる。Daniel氏は積極的にコミュニティに参加したり、質問してほしいと話した。
会場には米国のスタッフも数多く参加しており、会場内で参加者の質問に答えるなど対応していた。
Yutaro Mori氏によるMongoDBの概要とアプリ作成のポイント
アメリカで生まれ育ち、ミシガン大学でコンピュータ・サイエンスを専攻したYutaro Mori氏は前職でMongoDBに触れ、その使いやすさとパフォーマンスに魅力を感じて同社に入社したという。普段はMongoDB社のNYオフィスで働いている。日本で過ごした期間は短いと言いながらも、丁寧な日本語でMongoDBとはどんなデータベースなのかということからセッションをスタートさせた。
MongoDBを使ったデータは、ほとんどの場合ドキュメントとして作成する。JSONによく似たデータ構造で ディスクに保存される前に二元復号化され、BSON(バイナリ型JSONの略)と呼ばれる。
エンジニアが好むプログラミング言語でのデータ構造に変換することが可能で、Java Scriptの場合はBSONを複合化するのみ、PHPのArray、PythonのDict、RubyのHashに変換できる。
次に、MongoDBの基本機能である、レプリケーションとシャーディングを紹介。レプリケーションは、冗長性を得るために多くのプロダクション環境で導入されている。マスターノードがスレーブノードと同期しているため、マスターノードにダメージが起きてもデータロスを防ぎ、サービス停止時間を最小限にすることができる。その上、レプリケーションを使用することで読み取りの負荷をノード間で分散させることができる。負荷のほとんどが読み取りで占められるアプリケーションの場合、その負荷をスレーブに分担させることでシステムのスケールが可能になる。
シャーディングは、MongoDBを水平スケーリングさせる。データを複数のサーバーに分散させることで、CPUはI/Oの負荷を分散させることができる。性能に直結するため十分なサイズのメモリが必要だが、メモリやディスクモジュールが大きいほど価格の上昇幅が大きくなるため、高コスト、高機能なサーバー1台より、複数のサーバーにデータを分散させる方がコストパフォーマンス向上につながる。
RDB的な使い勝手を持ちつつ、高速パフォーマンスを実現する
ここ数年CPUとメモリの値段が下がっている一方、データとWebのアクセス量が増加している。処理能力が高く、大量のデータを扱うには、RDBでは性能に限界があり、NoSQLを使うことでシステムを補おうという考えがある。
中でも代表的なmemchachedは、KeyとValueのハッシュ形式でデータを持ち、基本的なKeyでの検索に限られた高速なデータストアだが、MongoDBではこういった高速パフォーマンスを保持しつつ、RDBのような機能をバランス良く組み込むデータベースを目指している。
そのため、JoinのようにRDBには存在するがMongoDBが採用を見送った機能もある。この機能は場合によってコスト高やパフォーマンス劣化を招く原因と判断されたが、embeddedを使うなどして、RDBと同じように扱うことができる。
MongoDBでは、RDBのように検索クエリでCRUD操作が可能となっている。一般的なNoSQLのデータベースでは、SQLでいうGROUP BYやSumなどの集計機能がないが、MongoDBでは、NoSQLのパフォーマンスを維持しつつ、こういったSQLが持つような機能を開発している。集計フレームワーク(Aggregation Framework)はその1つで、クエリと同様にGROUP BYやSumが使用できる。
一貫性を保ち、レプリケーションやシャーディングを使用していても、いつでも正確なデータを返すことができる他、ドキュメント指向データベースのため、スキーマを定義しなくても良いといったMongoDBの特長をひと通り説明。後半ではMongoDBを使ったアプリ開発のポイントをスライドで紹介した。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- SoftLayerでMongoDB環境を構築してみよう
- IoTに適したNoSQL・分散Key-Valueストア
- 高可用性とデータ・シャーディングを実現できるMySQL Fabricとは?
- NoSQLとNewSQLの技術革新、マルチテナンシーの実現と高いスケーラビリティを提供
- KubeCon Europe 2023よりGitHubがMySQL互換のVitessを使った事例のセッションを紹介
- EnterpriseDBのCTOに聞いた、エンタープライズ版PostgreSQLのこれから
- オラクル、「MySQL 5.7 Development Milestone Release(DMR)」をリリース
- ビッグデータ処理基盤とRDBの連携の必要性およびPostgreSQL FDWの概要
- オラクル、可用性と拡張性の高いMySQL構成の管理を簡素化する「MySQL Fabric」を発表
- MySQL Cluster:NoSQL+SQL、NoSQLも使える高可用性インメモリRDBMS