初めてのMongo db

Preview:

DESCRIPTION

XEgg 第2回 初心者向けのMongoDBの解説です。

Citation preview

自己紹介

•玉川竜司@Sky

•翻訳してます。4冊/年

•今日は日本MongoDB

ユーザー会ということで。

主な訳書

最新刊

実践Vagrant

2/21発売!

ちなみに次の次

本日のお品書き

•NoSQL登場の背景

•MongoDBの特徴

まず申し上げて

おきたいこと

リレーショナルデータベースは

基本です

勉強しましょう!

NoSQL登場の背景

NoSQL登場の背景

•一言でいうなら、「ビッグデータのせい」•リレーショナルデータベースが本来向いている処理:•複雑な構造を持っているデータを•繰り返し読み書きする•少量でもメモリキャッシュが効きやすい

NoSQL登場の背景

•いわゆるビッグデータでよくあるパターン:•比較的単純な構造•単一マシンでまかなえるメモリキャッシュには乗らないほどの量

•書き込みや修正が少なく、読み出しが多い

NoSQL登場の背景

•RDBが持っている長所をいくつか捨てて、

新たに登場してきたワークロードに対応する

•捨てるもの:複雑なデータ処理、トランザクション処理など

•得るもの:スケーラビリティ

NoSQL登場

•比較的シンプルなエンジン群が登場 ― いわゆるキーバリューストア

•値にアクセスするためのキーは1つだけ。シンプルなAPI

•きわめて高いスケーラビリティを持つ

•スケールアウト

そしてMongoDB登場

•クラウドプラットフォームの開発プロジェクトから独立したプロダクトに

•今では、ワールドワイドで見ればNoSQLエンジンとしてはNo.1

•開発元は10genが改名してMongoDB社に

MongoDBの紹介

MongoDBの特徴•NoSQLとリレーショナルデータベースとのハイブリッド的な性格

リレーショナルデータベース的 NoSQL的

•セカンダリインデックス

•クエリプロセッサ

•JSONストア(構造化データ)

•スケールアウトによるスケーラビリティ

•Fire & Forget

•キャップ付きコレクション

•レプリカセット/フェイルオーバー

インストールは簡単です

WindowsもOK!

MongoDBの特徴(JSONストア)•構造を持ったデータをそのままドキュメントとして格納可能

•内部的にはバイナリ形式のJSONドキュメントを保存

•各種JavaScriptフレームワークと非常に相性が良い

MEANスタック:MongoDB、Express、AngularJS、Node.js

MongoDBの特徴(JSONストア)

•Demo

MongoDBの特徴(インデックスとクエリ)

•NoSQL系エンジンは、主キー以外にインデックスを持てないものも多い

•MongoDBでは、ドキュメント中のほぼ任意の部分の値に対してインデック

スを張ることができる。階層構造の中でもOK

•独自のクエリ言語を持っており、クエリプロセッサが実行方針を判断する

MongoDBの特徴(セカンダリインデックス)

•デモ

MongoDBの特徴(レプリカセット)•複数のサーバーで、可用性と読み取りのパフォーマンスをアップ

•基本機能であり、非常に手軽に利用できる

•アプリケーションの側のフェイルオーバー処理の多くはドライバ担当。

•サーバーのフェイルオーバーは、ほぼ自動•もちろん、シビアな環境ではいろいろ考慮する必要あり

MongoDBの特徴(レプリカセット)

Primary書き込み

Secondary

Secondary

複製

読み取り

MongoDBの特徴(レプリカセット)

Primary書き込み

Primary

Secondary

複製

読み取り

MongoDBの特徴(シャーディング)

•複数のサーバーで、書き込みのパフォーマンスアップ

•全体としての可用性は下がるので、レプリカセットと併用する

MongoDBの特徴(シャーディング)

Primary

Secondary

Secondary

Primary

Secondary

Secondary

Primary

Secondary

Secondary

Mon

gosシャードキーで分散

MongoDBの特徴(トレードオフ)

•データの安全性とパフォーマンスとのトレードオフの選択肢が多彩

• Fire & Forget

•Write Ahead Log

•書き込み保証(Write Concern)

• タグによる書き込み保証

MongoDBの特徴(アーキテクチャ)

•特にメモリ管理が特徴的

•MongoDB自身はメモリバッファは管理しない。

•単に、データファイルをメモリマップドファイルとして扱っているだけ•事実上64bit OS必須。

• 「ホット」なデータのサイズと、OSが利用できる物理メモリのサイズの関係が重要

欠点もあります

集計

MongoDBがはまるところ

•ログなどの受け手

•プロトタイピング

•シャーディングが効きやすく、ある程度の単位で構造化されているデータ

Playgroundの紹介

•https://bitbucket.org/tamagawa_ryuji/mongodb_replicaset_playground_o

n_vagrant

•Vagrantがあれば、リポジトリをダウンロードしてVagrant upするだけで、レプ

リカセットの環境を構築して遊べます

•3台の仮想マシンが立ち上がるので、メモリはそれなりに必要です。

ご清聴ありがとうございました

Questions?