キーバリュー、RDB、強い一貫性が要る状態、ファイルの置き場を、どう使い分けますか

読み方と、どれだけ新しさが要るかで置き場を選ぶ問い。キーバリュー、RDB、1 か所で順に処理する仕組み、オブジェクトストレージの向き不向きと、料金の体系の違いまで答えます。

答えてみる

面接官に「キーバリュー、RDB、強い一貫性が要る状態、ファイルの置き場を、どう使い分けますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「キーバリュー、RDB、強い一貫性が要る状態、ファイルの置き場を、どう使い分けますか」
  • 「設定の値、注文の記録、チャットの部屋、利用者が上げた画像は、それぞれどこに置きますか」
  • 「全部 1 つの RDB に入れてはだめですか」(裏から聞く形)

面接官が見ている点

  • 置き場ごとの得意と苦手を、データの読み方と書き方で説明できるか
  • 「更新がすぐ全部に見えるか」という一貫性の違いを分かっているか
  • 料金の体系や運用の手間まで含めて、捨てた物を言えるか

短い答え

  • 読み方と、どれだけ新しい値が要るかで分けます。キーで引くだけで少し古くてもよい物はキーバリュー、条件で探したり結合したりする物は RDB、同時に書き換えて食い違ってはいけない状態は 1 か所で順に処理する仕組み、ファイルや画像はオブジェクトストレージです。
  • 置き場ごとに速さ、一貫性、問い合わせのしやすさ、料金のかかり方が違い、全部に強い物は無いからです。
  • たとえば設定の値はキーバリュー、注文は RDB、在庫の引き当ては順に処理する仕組み、画像はオブジェクトストレージに置きます。そのぶん置き場が増え、運用の手間も増えます。

少し詳しい答え

4 つの置き場の向き不向き

  • キーバリュー鍵 (キー) を渡すと値が返る、いちばん単純な置き場です。読むのが速く、たくさん読まれる設定やキャッシュに向きます。条件で探す、表を結合する、といった問い合わせは苦手です。AWS なら DynamoDB、Google Cloud なら Firestore、Cloudflare なら KV が近い位置にあります
  • RDB 表と SQL で、条件での検索、集計、結合、トランザクション (まとめて成功か失敗にする仕組み) ができます。注文や会員のように、関係のあるデータを正しく持つのに向きます。AWS の RDS、Google Cloud の Cloud SQL、Cloudflare の D1 などがあります
  • 強い一貫性が要る状態チャットの部屋、在庫の残り、回数制限の数のように、同時に何人も書き換えて、それでも食い違ってはいけない値です。1 か所で順に処理する仕組みに集めるか、RDB のトランザクションとロック (同時の書き換えを待たせる仕組み) で守ります。Cloudflare では Durable Objects がこの役で、AWS や Google Cloud では RDB や DynamoDB の条件付きの書き込みで同じ役を作ることが多いです
  • ファイルの置き場画像、動画、書き出したファイルは、オブジェクトストレージ (ファイルをキーで出し入れする置き場) に置きます。DB には置き場のキーだけを持ちます。AWS の S3、Google Cloud の Cloud Storage、Cloudflare の R2 などです

一貫性の違いで選ぶ

置き場によっては、書いた値がすぐにはほかの場所から見えません。これを結果整合 (しばらくすると全部がそろう、という約束) と呼びます。たとえば Cloudflare の KV は結果整合で、ほかの拠点に反映されるまで 60 秒かそれ以上かかることがある、と説明されています。

だから「設定を変えたら少し遅れて効く」で困らない物は置けますが、「残り 1 個の在庫」を置くと、2 人に同じ 1 個を売ってしまうおそれがあります。新しさが要るかどうかを、データごとに先に決めます。

料金の体系と、捨てた物

料金のかかり方も置き場で違います。オブジェクトストレージなら、保存した量、読み書きの回数、外へ出す転送の量のどれに、どれだけ料金がかかるかが、サービスごとに違います。たとえば Cloudflare の R2 は外へ出す転送の料金がかからない体系で、保存量と操作の回数には料金がかかります。S3 や Cloud Storage は転送にも料金がかかる体系ですが、前に CDN を置く、同じクラウドの中で使う、などで変わります。どれが安いかは、配る量、読み書きの回数、ほかに使っているクラウドで決まるので、それぞれの料金の説明で確かめます。料金は変わるので、面接では細かい金額ではなく、体系の違いで話します。

置き場を分けると、それぞれの得意を使えるかわりに、バックアップ、権限、監視の対象が増えます。小さなサービスや人の少ないチームなら、まず RDB 1 つにまとめ、ファイルだけオブジェクトストレージに出す、という始め方も十分です。読み込みが重くなってから、キャッシュとしてキーバリューを足します。

話すときは、自分が関わったサービスで「このデータはここに置いた。理由はこう」という例を 1 つ用意します。

よくある間違い

  • 在庫や残高を結果整合の置き場に入れる反映が遅れる間に、同じ物を 2 回売る、残高より多く使う、が起きます
  • 画像を DB の列にそのまま入れる DB が重くなり、バックアップも膨らみます。ファイルはオブジェクトストレージに置き、DB にはキーだけを持ちます
  • 「転送料は無料」とだけ言う外へ出す転送の料金がかからない体系でも、保存量と操作の回数には料金がかかります。体系として説明します

深掘りの問い

  • 「キーバリューの値が古いまま残ったら、どう困りますか」設定なら少し遅れて効くだけですが、権限の取り消しが遅れると危ない、のように、データごとに困り方が違う、と答えます
  • 「在庫の引き当てを RDB だけで作るなら」 トランザクションの中で残りを確かめて減らし、同時の書き換えはロックや条件付きの更新で防ぐ、と答えます
  • 「利用者が上げた画像を安全に配るには」置き場は外から直接読めないようにし、期限付きの URL を発行する、と答えます

確認日 2026年10月24日

技術面接問題の一覧へ戻る