More Related Content
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発... PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ JenkinsとCodeBuildとCloud Buildと私 What's hot (20)
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜 RLSを用いたマルチテナント実装 for Django 20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK) MySQL・PostgreSQLだけで作る高速あいまい全文検索システム RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話 PlaySQLAlchemy: SQLAlchemy入門 20190806 AWS Black Belt Online Seminar AWS Glue なかったらINSERTしたいし、あるならロック取りたいやん? Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤 コンテナの作り方「Dockerは裏方で何をしているのか?」 株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game... 20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline Similar to Mongo dbを知ろう (20)
DB tech showcase: 噂のMongoDBその用途は? mongoDB: OSC Tokyo2010 spring MongoDB社の製品紹介 2019-MongoDB EA&Atlas データベース勉強会 In 広島 mongodb More from CROOZ, inc. (16)
CROOZ SHOPLIST株式会社 エンジニア向け会社説明資料 モバイルゲームの全世界オンライン対戦を実現する方法を考察する 全世界135か国に配信したレーシングゲーム『ACR DRIFT』の制作秘話と技術基盤の構築について GitLab & web hooks & git-flowで実現する企業向けgit環境の構築 第7回テックヒルズ『Game Engines!!~どのゲームエンジンを選ぶ?~』資料 MySQL勉強会 インデックス編.2013 08-02 MySQL勉強会 リプリケーション編.2013 08-09 Mongo dbを知ろう
- 8. ドキュメンド指向②
Profile collection:
{
name: “Alice”,
age: 20,
hobby: {
“outdoor”: [
“motorcycle”,
…
],
“indoor”: [
“reading”,
],
}
}
レコードの代わりに、JSONライクなオブジェクト
が格納される。
オブジェクトの構造は理解され、検索や参照に利
用できる。
この例でアウトドアの趣味にアクセスするときは、
hobby.outdoor
でアクセスできる。
こうしたサブオブジェクトやデータに対しイン
デックスの作成など、DBの機能がフルで利用でき
る。
NOTE:
内部的にはJSONがBSONというJSONのバイナリ版が格納され、
パフォーマンスの向上と容量削減に貢献している。
© CROOZ,Inc
8
- 21. レプリケーションまとめ
• Primary, Secondary, Arbiterサーバーで構成する。
• データサーバーの数に応じてArbiterを用意し無駄をなす。
• 障害時は自動的にシステムの可動性を維持する。
• システム動作状態での復旧が可能。
• レプリカセットに対する読み込み先は細かく制御できる。
© CROOZ,Inc
21
- 23. シャーディングの仕組み
mongos
{key: 150}
Primary shard
chunk0
chunk3
•
•
•
•
•
0 ~ 100
301 ~
Shard
Shard
chunk
1
101 ~ 200
chunk
2
201 ~ 301
データはドキュメンド単位ではなく、chunkというデータの箱単位でシャー
ドされる。
インデックス作成と同じ要領でコレクション別のシャードキーを作成。こ
のキーは変更不可。
シャードキーに対してはRangeBasedPaginationのアルゴリズムでchunkに
分割し、このchunkを各シャードに分散する。
振り分けられないデータは全部プライマリシャードサーバーでに行く。
プライマリシャードはコレクション別でシステムが勝手に割り振る。
© CROOZ,Inc
23
- 27. シャーディング構成要素の障害時の挙動
• configサーバー障害
– 一部障害の場合
• configサーバーのメタデータが読み取り専用になる。
• DBに対する通常操作、mongosの立ち上げができるが、シャーディング構成
の変更やChunkの移動や分割ができなくなる。
• データの大量インサードがあった場合、偏ったシャーディング結果になる
か、インサード失敗になる。
– 全部障害の場合
• 一部障害の挙動に加え、mongosの追加や再起動ができなくなる。(精確に
は立ち上げ後落ちる)
• 一部シャーディング構成状態を確認するコマンドが利用できなくなる。
• Mongosサーバー障害
– 単一mongosの障害はシステム自体にインパクトを与えない。
– クライアントにとってはシングルポイントになるため、プロセスの自動再起動
や、接続先切り替えの仕組みで回避できる。
© CROOZ,Inc
27
- 34. Memory-Mapped Fileから見るMongoの特性
• 利点:
– 通常はメモリ上で動作するため、動作が早い。(特に書き込み)
– よく利用するデータは自然と物理メモリに来るので、メモリ
キャッシュシステムのような役割もこなす。
– 大量な書き込みでも相対的にディスクIOが小さい。
• 欠点:
– 32bitシステムでは使いものにならない。
– 仮想メモリ扱いなので、ページアウトが発生する。(page fault)
– Mongoがアクティブに動く環境では他のプロセスをガンガンス
ワップアウトさせてしまう。
– 永続化は60秒ごとの更新なので、最悪60秒のデータが飛ぶ。
• 結論:
– メモリをいっぱい積みましょう!
© CROOZ,Inc
34
- 42. 特徴的な仕様②: fsync
• Mongoではfsyncは管理コマンド。メモリをディスクに
直ちにフラッシュさせる。
• 各言語のドライバでは書き込み系APIのオプション。
– 指定すると該当オペレーションのディスク書き込みを保証する。
– ただし、ジャーナリングありとなしで挙動が違う。
– ジャーナリングなし:
• メモリへの書き込み後、直ちにディスク書き込みが行われる
– ジャーナリングあり:
• メモリへの書き込み後、ジャーナリングファイル書き出しの最大
100ms間隔を待つ。
– ジャーナリングありではより低負荷で永続保証書き込みできる。
– でも、用法用量を守って正しく使うべき。
© CROOZ,Inc
42
- 44. その他の機能
• MapReduce
– ビッグ・データの解析機能をデフォルトで搭載。
• 固定長コレクション(Capped)
– サイズやドキュメンド数が予め決まった特殊なコレクション。
– 挿入に対して非常に高いパフォーマンスを持つ。
– シャードできない。
• 二次元地理空間インデックス
– 2D座標インデックスによる距離的な検索ができる。
– 平面モデルと球面モデルをサポート。
– このインデックスはシャードキーに指定できない。
© CROOZ,Inc
44