【入門編】 LSN(ログシーケンス番号) – PostgreSQL

こんにちは!データベースの世界へようこそ。

普段、何気なく使っているアプリやWebサイト。その裏側で「データが消えずに正確に保存されている」のって、実はものすごい奇跡みたいなことなんです。今回は、PostgreSQLというデータベースが、どうやってその「正確さ」を守っているのか。その秘密兵器である「LSN(ログシーケンス番号)」について、お話ししてみようと思います。

難しそうな名前ですよね? でも大丈夫。少しだけ日常の風景に例えてみましょう。

—

終わらない「日記」を書く仕事

想像してみてください。あなたは、ある大きな図書館の「記録係」です。
毎日、何千人もの人が本を借りたり返したりします。そのたびに、あなたは「誰が・何を・いつ」したのかを、分厚いノートに書き留めなければなりません。

このノートこそが、PostgreSQLでいうWAL(Write Ahead Log:先行書き込みログ)です。

もしノートがなかったらどうなるでしょう? 大地震が起きて、本棚がめちゃくちゃになったとき、「どの本がどこにあったのか」なんて、誰にも分かりませんよね。だから、あなたはどんな小さな変更でも、必ず先にノートに書き込んでから、本棚を整理するはずです。

LSNは「ページ番号」付きのタイムスタンプ

さて、ここで登場するのが今回の主役、LSN(ログシーケンス番号)です。

記録係のあなたは、ノートにただダラダラと書き込むだけではありません。書き込むたびに、ノートの隅っこに「これは何ページ目の、何行目の記録だよ」という通し番号を振っていきます。

  • 「1番目の記録:Aさんの本を返却」
  • 「2番目の記録:BさんがCという本を借りる」
  • 「3番目の記録:Dさんの予約を完了」

この「通し番号」が、まさにLSNなんです。

なぜこの番号が重要なのか?

もし途中で停電が起きて、作業が中断してしまったら……。あなたはパニックになりますよね。「どこまで書いたっけ? 本棚の整理はどこで止まった?」と。

でも、このLSNがあれば安心です。

1. 本棚のデータには、「最後に行った作業はLSN『3番』までだよ」というメモが残っています。
2. ノートを最初から読み返して、LSNが「3番」のところまで作業を再現すればいいんです。
3. 「4番」以降の作業はまだ本棚に反映されていなかったわけですから、そこは無視すればOK。

こうして、LSNという「目印」があるおかげで、データベースは「中途半端な状態で壊れる」という悲劇を回避できるんです。

64ビットという「終わりのない数字」

ちなみに、このLSNは「64ビット」という巨大な数で管理されています。
これ、どれくらい大きいかというと……宇宙の始まりから終わりまで、毎日何兆回記録を書き続けても使い切れないほどの巨大な数字です。

つまり、データベースの寿命が尽きるまで、番号が重複したり枯渇したりすることはない、という最強の安心感なんです。

最後に:データベースの「誠実さ」を支えるもの

LSNという言葉を聞くと、なんだか冷たい記号のように感じるかもしれません。でも、これって「さっきの作業、ちゃんと終わったっけ?」「今のデータは本当に正しい?」と、データベースが自分自身に問いかけ続けるための誠実なメモ書きなんです。

私たちが安心して銀行口座の残高を見たり、SNSで投稿したりできるのは、このLSNという小さな「道しるべ」が、裏側で一生懸命働いてくれているからなんですよ。

もし今度、PostgreSQLに触れる機会があったら、「ああ、今このデータにはLSNが刻まれているんだな」と、少しだけその健気な仕事ぶりを想像してみてください。きっと、データベースを見る目が少し優しくなるはずです!

それでは、また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました