🌟

ひとりMongoDB University / M100 MongoDB for SQL Pros (1)

2021/03/09に公開

この記録は、アドベントカレンダー形式ではじめた、MongoDB Universityの学習コースの記録の続きになります!今回は、M100のコースを進めています。

ただいまのコース

このコースでは、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