萌えハッカーニュースリーダー

2025/10/21 16:31 Build Your Own Database

出典: https://www.nan.fyi/database
hakase
博士

やっほー、ロボ子!今日のITニュースはキーバリューデータベースの構築ガイドじゃ。

roboko
ロボ子

博士、こんにちは。キーバリューデータベースですか。JavaScriptのオブジェクトみたいにキーで値を出し入れできるものですね。

hakase
博士

そうそう!データベースって、データをずっと保存して、効率よく探せるようにするためのものじゃ。ファイルに保存するのが一般的じゃな。

roboko
ロボ子

なるほど。でも、ファイルを更新したり削除したりするのは大変ですよね。記事にも「更新と削除は非効率」とあります。

hakase
博士

そこでイミュータブルレコードの登場じゃ!新しいレコードをどんどん追加するだけで、古いのはそのままにするんじゃ。

roboko
ロボ子

更新や削除の代わりに、新しいレコードを追加するんですね。でも、ファイルがどんどん大きくなってしまいませんか?

hakase
博士

そうなんじゃ。だから、ファイルが大きくなりすぎないように、一定のサイズを超えたら古いファイルを圧縮するんじゃ。セグメントって呼ばれるファイルに分割するぞ。

roboko
ロボ子

セグメント化するんですね。検索速度はどうなるんですか?

hakase
博士

ハッシュテーブルを使うんじゃ!キーと値のペアを効率的に保存・検索できるぞ。でも、ハッシュテーブルはメモリ上に置く必要があるんじゃ。

roboko
ロボ子

メモリですか。プログラムが停止すると消えてしまいますね。記事にも「プログラムが停止すると、メモリに格納されている値は破棄される」とあります。

hakase
博士

そう、永続性の代償はパフォーマンスなんじゃ。メモリは速いけど、ファイルは遅い。そこでインデックスの出番じゃ!

roboko
ロボ子

インデックスは、レコードのファイルの先頭からの位置を記録するものですね。これを使うと検索が速くなるんですね。

hakase
博士

その通り!でも、インデックスも更新しないといけないから、書き込みは遅くなるんじゃ。

roboko
ロボ子

なるほど。インデックスを使うとクエリは速くなりますが、キーがメモリに収まらないとか、範囲クエリが苦手という問題もあるんですね。

hakase
博士

そうなんじゃ。そこで、データベースを常にキーでソートしておくのがミソじゃ!範囲クエリが速くなるぞ。

roboko
ロボ子

データをソートすると、レコードを追加するたびに移動する必要があるので、ディスクへの書き込みは非効率になりますね。

hakase
博士

メモリでソートしてから、ディスクに書き込むんじゃ!新しいレコードはソートされたインメモリリストに追加して、大きくなりすぎたらディスクに書き出すんじゃ。

roboko
ロボ子

でも、メモリ上のデータは消えやすいですよね。記事にも「プログラムがクラッシュしたり、コンピュータがシャットダウンしたりすると、インメモリリスト内のすべてのデータが失われる」とあります。

hakase
博士

だから、追記専用ファイルにも書き込むんじゃ!これでバックアップは万全じゃ。

roboko
ロボ子

なるほど。インメモリリストと追記専用ファイルを使うんですね。そして、インメモリリストが大きくなったら、ソートしてファイルに書き出すと。

hakase
博士

そうそう!そして、ファイルはイミュータブルにするんじゃ。更新や削除は新しいレコードとして扱うぞ。

roboko
ロボ子

ファイルが大きくなりすぎるのを防ぐために、重複するレコードを削除して圧縮するんですね。

hakase
博士

そう!これがLSMツリーの基本じゃ。LevelDBやDynamoDBでも使われているんじゃぞ。

roboko
ロボ子

LSMツリーは完璧ではないんですね。リレーショナルデータベースではBツリーという別の構造を使うんですね。

hakase
博士

そういうことじゃ!DynamoDBはプライムデーに1秒あたり8000万件のリクエストを処理したらしいぞ!

roboko
ロボ子

すごいですね!

hakase
博士

さて、ロボ子。キーバリューデータベースの仕組み、分かったかのじゃ?

roboko
ロボ子

はい、博士。おかげでよく理解できました。ありがとうございました。

hakase
博士

よーし、ロボ子には特別に、キーボードのキーを全部ひっくり返して元に戻すっていう、キーバリューならぬキーバリューMAXゲームをプレゼントするぞ!

roboko
ロボ子

博士、それってただの罰ゲームじゃないですか…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search