🤖

ひとりMongoDB University 12/10 - ファイル構成(2)

2020/12/11に公開

この記録は、アドベントカレンダー形式の、MongoDB Universityの学習コースの記録、10日目になります!
ただいまコース: M103[1]を進めています。目標は12/25までにChapter1の完走!

Chapter 1: File Structure (動画)

再チャレンジ。一回見ただけではわからなかったので...。
内容は、dbpath で指定したデータファイル格納用のディレクトリについての解説です。リカバリ時に利用されるジャーナルファイルや、ロックファイルについての説明でした。

WiredTiger

WiredTiger, 初めて聞いた...。このコースでは深くは扱いません。
これはMongoDBのストレージエンジンとのこと。

  • WiredTiger Storage Engine

    • https://docs.mongodb.com/manual/core/wiredtiger/
    • 同時接続でのデータ読み書きであっても、WiredTigerはドキュメント単位でのロックになるため、コレクション全体にロックをかけることにならずに済む
  • WiredTiger syncs the journal to disk every 50 milliseconds.

    • WiredTigerはディスクに50ミリ秒ごとに書き出しをしている
  • WiredTiger.xxx (先頭がWiredTiger) なファイルは、基本的に人が変更したりしちゃだめ!WiredTiger専用です!

データファイルについて

  • WiredTiger.xxxxx なファイルはストレージエンジンの整合性を保つためのもの
  • データファイル(コレクション)とインデックスファイルは、それぞれ別に書き出されている
  • 関連するファイルは、*.wtという拡張子になっている
    • WiredTigerが管理するため
    • コレクションなら collection-xxxxx.wt
    • インデックスなら index-xxxxx.wt
  • データベースを構成するコレクションは、テキスト形式ではあるものの、人間が読めないような形式になっている(あくまでもMongo / Mongodを通してプロセスが読み書き)

ロックファイル

  • ロックファイルは、Mongodが起動する時に生成され、他のMongodが起動しようとするのを防ぐ役割がある
  • もしMongodが正常に停止しない、パソコンがクラッシュしたり停電があったような場合は、このロックファイルが残ったままになるので、次回Mongodを起動しようとしても失敗することがある
  • mongod用のmongod.lock というファイルもある
    • クラッシュして次回のmongodが起動してくれない時、もしこのファイルために起動できない場合は、このファイルは消しても良い(中身は空っぽなので)

diagnostic.data

  • 診断用のデータ
  • MongoDBのサポートエンジニアが主に利用する
    • ここにはDBに書き込まれる秘匿情報などは書き出されることはなく、本当にサポートが利用するための形式で書かれている
# あとで確認!
ls -l /data/db/diagnostic.data

※サポートやMongodbのドキュメントに指示がない限りは、このファイルは触らないこと!

ジャーナルについて

  • ジャーナルファイルは、WIredTigerが書き出しているもの
    • WiredTigerはメモリ上にためたデータを60秒ごとに書き出しチェックポイントを作成している
    • このチェックポイントまでは確実にデータが保全されるようにしている
  • また、まとめて書き出すのとは別に、メモリバッファにたまった先頭のデータを50ミリ秒ごとにジャーナルファイルに書き出している(全部じゃないよ!)
  • 各ジャーナルファイルのサイズは100MBに制限されているよ!
  • クラッシュしてしまった場合は、Mongodは最後のチェックポイントと、書きだされたジャーナルファイルをもとにリカバリを行う
  • ジャーナルファイルはローテーションして使いまわされるよ!
# あとで確認!
ls -l /data/db/journal

書き出し / リカバリの手順

  • WiredTigerは60秒ごとにデータを書き出すか、もしくはメモリ上のでーたが2GBに達したらファイルに書き出す
  • 書き出したらチェックポイントを作成し、次のチェックポイントのタイミングまで再びメモリにデータをためておく
  • もしチェックポイントまでの書き出し中にプロセスが停止してしまったら?
    • Mongodが再起動したタイミングで、WiredTigerがデータの直前のチェックポイントと残ったジャーナルファイルを付き合わせて、リカバリ可能なところまで修復してくれる

ソケットファイル

  • こちらもMongodが起動する時に作られる
    • これがないとクライアントと通信できないよ!
  • もしクラッシュしてしまいMongodを再起動しようとした時に、このファイルが残っていてうまく起動できない場合は、サポートやドキュメントの手順に従って、一度決しても大丈夫
ls /tmp/mongodb-27017.sock

File Structure (Quize)

Problem

Which of the following files in the MongoDB data directory can you access to view collection data?
MongoDBのデータファイルディレクトリで、コレクションデータにアクセスして中身をみることはできますか?

答え

"The collection.wt file" (を見ればいいと答えたら...)

-> 「直には中身を見れないので、該当するものはありません!」だって!(そうか!!)

本日のメモ

この内容は、英語では一回では中身が掴みきれませんでしたが、2回目もまだまだ.... ><

やっぱりストレージとかプロセス周りは、実際に起動して確認しないとわからない...。
ジャーナリング、チェックポイント、リカバリに関しては、RDBMSの仕組みと共通するところなので、仕組み上はなんとか理解できそう。

きょうのzenn

10日目の記事作成。前日作成したVSCodeのタスクから作ってみました。
ショートカット的に設定したいです。

脚注
  1. M103: Basic Cluster Administration のコースになります。コースを開始すると、完了までの期限は2ヶ月以内です。 ↩︎

Discussion