ひとりMongoDB University / M100 MongoDB for SQL Pros (1)
この記録は、アドベントカレンダー形式ではじめた、MongoDB Universityの学習コースの記録の続きになります!今回は、M100のコースを進めています。
ただいまのコース
- M100: M100 MongoDB for SQL Pros
このコースでは、RDBMS (SQL) の知識と対比させながら、MongoDBの学習を進めることを目標としています。
また、MongoDBに合わせたデータのモデリングについても学習します。
(SQL、RDBMS、モデリングについて学習している、経験があることが前提です)
Chapter 1: Concepts of RDBMS and MongoDB
Video: Introduction
- RDBの経験から、MongoDBへの変換、ドキュメントへのモデリングができるようにする
- RDBの知識をMongoDBと対比させ、クイズ形式で進めていく
- SQLをMongoDB Query Language (MQL)に置き換えができるようにする
- 動画も合わせて学習しますよ!(引き続き英語です)
MongoDB in Five Minutes
-
RDB(Excelのシート・テーブル)の説明
- 正規化でスッキリするけど、テーブルは増える
- 患者さんの情報を管理するような場合、たくさんのテーブルが必要
- 開発者もどのテーブルにどんな情報が入っているかを熟知しないといけない
- Exp. テーブルごとのキャビネットがたくさんあるようなイメージ
- 1人の患者さんのデータを取り出すのに、複数のキャビネットからピックアップして結合が要る
-
MongoDBの場合は、「ドキュメント」として1つのドキュメントの中に必要なものを詰め込む
- このデータはこの属性が無いから正規化しよう、という必要が無い
- こういったデータの構造から、データベースを分散させやすい
- クラスタ化、シャーディングしやすい
- 結合が不要になる分、読み込みが早い
-
管理用のツールも運用を意識した作りになっている
-
MongoDBはMongoDB Atlasのプラットフォームのほか、AWS / Azureといったクラウドベンダーの上でも動かせるよ!
Quiz: MongoDB in Five Minutes
Problem:
Which of the following are some of the main features of MongoDB?
MongoDBの特徴として適切なのはどれ?
Answer:
Fault tolerance is natively built into MongoDB by keeping redundant copies of the same data on different servers.
MongoDBは耐障害性を意識した作りになっている。たとえば、冗長化のためにデータを異なるサーバにコピー(レプリケート)させるなど
- レプリケーションが標準的に構成可能で、プライマリノードがダウンした場合も、自動でセカンダリをプライマリに昇格できるしくみ(エレクション)を備えている
- レプリケーションに関してはいくつかの方式があり、同期間隔も調整できる
- ネットワーク障害の場合もレプリケーションされたノードを利用してのアプリケーション稼働が可能
Scalability allows to seamlessly scale across multiple servers to store and process data.
スケーラビリティも考慮されていて、複数のサーバーにデータをシームレスに保持することができる。(こうして性能を上げていく)
- パフォーマンスが必要になった場合、サーバーをスケールアップするのではなく、スケールアウトしやすい
- 単一のスケールアップは非常に高額なので、スケールアウトのほうが費用面でのメリットもある
MongoDB lets you move data where you need it, so you can keep data near users.
MongoDBは必要に応じてデータを移動させることができる
- アプリケーションのユーザ上、ワークフロー上、利用状況に応じて地理的に近いデータを配置できる
- Exp. ヨーロッパのユーザ向けにはヨーロッパにノードを配置、アジア向けならアジアに、など
Video: NoSQL Databases
NoSQLのタイプ
- RDBMSでも、データが膨大になると水平方向にもスケールさせることはできる
- ただしテーブル間の整合性、データの一貫性を保証しつつ同時に書き込むのは難しい
- NoSQLデータベースは4つのタイプがある
- Key / Value
- グラフ
- カラムベース(RDBMSに近い)
- ドキュメント
- MongoDBはドキュメント型
- 基本的には1ドキュメントにデータをまとめているので結合の必要がない(もしくは少ない)
- キーをベースにして、あとはどのノードにデータが存在するかがわかれば良い
- パーティション(分散)させやすい
- データの保持、アクセスの仕方が利用者からみて自然な形式
- Key / Valueの場合は、プライマリキーをもとにデータにアクセス
- 1:1の値ではなく、Valueがカラムを保持した形なのがカラム型
- グラフデータベースは、オブジェクト間に同じテーブル構造を保持している
※MongoDB以外のタイプのものはちょっと学習が必要....
※どのノードにデータが配置されているか特定するため、もちろんインデックスが必要ですが、インデックス自体も分散させて保持(シャーディングの場合はConfig Serverが存在し、このConfig Server自体もレプリケーションで冗長化している)
分散&冗長化
- スケールアウトしてサーバーを増やすと、もちろんサーバー自体の故障率も上がる可能性がある
- この問題の解決のために、分散したデータもさらにレプリケーションさせることで耐障害性を上げるアプローチを取れる
- 高性能なマシンリソースではなくてもいい(複数箇所にデータのコピーが存在することが大事)
- 多くのNoSQLはこの方式をとることで性能と耐障害性を上げている
Quiz: NoSQL Databases
Problem:
Which are correct statements about NoSQL databases?
NoSQLデータベースとして正しいものはどれ?
Answer:
NoSQL databases were designed to scale large datasets horizontally.
水平方向にスケールアウトするデザインを採用しているよ!
Most NoSQL databases have built-in modern features like data redundancy and tolerance to failures.
多くのNoSQLデータベースは、冗長化と耐障害性を考慮した作りになっているよ!
今回のメモ
ちょっと間が空きましたが、3月中旬での完走を目指します!
管理者コースを先に学習していたので、用語的には理解しやすいかも!
Discussion