Insights·2026-09-16

ストレージと CDN とは何か — ファイルはどこに置くのか

データベースは名前や日付や数字を入れるのに向いた表の構造なので、写真や動画はそのマスに入れる物ではない。入れれば照会のたびに重い塊が一緒に引きずり出される。だからファイルはストレージに別に置き、データベースには経路だけを書く。さらに、よく使うファイルの写しを世界各地にあらかじめ配り近い場所から送り出す網が CDN であり、サイトが遅いという訴えのかなりの部分はこの層から始まる。

파일은 스토리지에 두고 표에는 경로만 적는다 — 글의 요약 도식

なぜ画像を表に入れないのか

前回、データベースは表計算のような見た目だと述べた。名前と日付と数字を一行ずつ積むのに向いた構造である。

写真や動画はそのマスに入れる物ではない。概念としては入れられる。ただ効率が出ない。

理由は取り出し方にある。一覧画面を一つ描くのに二十行を照会するとして、各行に画像が丸ごと入っていれば、画面に出もしない画像まで全部引きずり出される。データベースはそういう重い塊が頻繁に行き来するために作られた道具ではない。

だから分けておく。ファイル本体はファイル置き場に置き、データベースにはそのファイルがどこにあるかの経路だけを書く。

表には経路だけが入る
posts テーブル
─────────────────────────────────────────────
id  title        cover_path
1   最初の記事    /uploads/2026/09/cover-1.webp
2   二つ目の記事  /uploads/2026/09/cover-2.webp

① 画面が posts を照会して cover_path を読む
② その経路でストレージにファイルを別途要求する

ストレージと二度目の要求

ファイルを置く場所をストレージという。サービスが小さければサーバー内のフォルダでもよく、大きくなればファイル専用のサービスを別に使う。

この構造で画面は要求を二度する。まずバックエンドに値を尋ねて経路を受け取り、次にその経路でファイルを別途要求する。ブラウザは画像のアドレスに出会えば自分で二度目の要求を送るので、人が気にすることではない。

値を返す側とファイルを返す側を分けておけば、サーバーを別に置くこともできる。値は値でよく応答するサーバーが担い、ファイルはファイルでよく送り出すサーバーが担う。性質の違う仕事なので、分けたほうがそれぞれ得意になる。

CDN — 距離と頻度を扱う層

よく呼ばれるファイルは近くの拠点に用意し、ほとんど呼ばれないファイルはリクエスト時に原本から取ってくるという対比の図。

ここにもう一つ付く。距離の問題だ。

アメリカにあるサーバーに画像を置いてあり、見る人が韓国にいるとしよう。要求は海底ケーブルを通って太平洋を渡る。一行の文字ならともかく、画像や動画のような大きな塊が毎回その距離を往復すれば遅い。

だから写しをあらかじめ配っておく。よく使われるファイルを世界各地の拠点に複製し、要求が来ればその人に最も近い拠点が送り出す。この網を CDN という。コンテンツ配信ネットワークの略である。

頻度も扱う。サイトのロゴは訪問者ごとに取りに来るが、人気のない記事の画像はほとんど取りに来られない。前者は常に近くに備えておく価値があり、後者は要求が実際に来てから元から取るほうがよい。その判断を代わりにするのがこの層の仕事だ。

層何を置くか何を判断するか
データベース値とファイルの経路どの値がどうつながるか
ストレージファイルの原本どこに安全に保管するか
CDNよく使うファイルの写し誰にどこから送り出すか

サイトが遅いという訴えの多くはここから始まる

画面では横400ピクセルで表示される場所に、4000ピクセルの原本ファイルを送っているというサイズ対比を棒で示す図。

遅いという報告を受けるとコードから開きたくなる。だが実際にはこの層であることが多い。

確かめることは決まっている。画像が原寸のまま出ていないか。画面で横四百ピクセルに見える場所に四千ピクセルのファイルを送れば、その分の時間はそのまま捨てられる。

形式も見る。同じ絵でもウェブ向けに作られた形式のほうがはるかに軽い。そして距離とキャッシュを見る。写しが近い場所から出ているか、一度受け取ったファイルをブラウザが再び取らずに済む設定になっているかだ。

ブラウザの開発者ツールのネットワークタブを開けば、どのファイルにどれだけかかったかがそのまま見える。コードに手を入れる前にここを見れば、たいてい答えが出る。次回は最後に、この全体を別のコンピュータへ移す話をする。