落ち着いた光のオフィスに、書類と緑色のフォルダーが積み重なっている。

プロダクトノート

静かに増えるデータベース

ユーザーが増えてきた。うれしい反面、認証データをいつまで今のデータベースに置けるのかが気になり始める。移行先を選び、データを分け、切り替えの手順を組む。その仕事を、サービスが忙しくなってから抱えたくはありません。Authrimは、新しいアカウントを受け入れるデータベースを、必要になる前に用意します。

移し替える前に、置き場所を増やす

Authrimが使うCloudflare D1には、データベース1つあたりの容量に上限があります。無料プランでは500MB、有料プランでは10GB。ユーザーや保存する情報が増えれば、どこかで次の置き場所が必要になります。

そのときに全員分のデータを移し替えずに済むよう、Authrimは最初から、アカウントを複数のデータベースへ振り分けられる構成にしています。分割した保存先の単位を、ここでは「シャード」と呼びます。

すでに登録されているアカウントは元の場所に置いたまま、新しく登録されるアカウントの保存先を増やす。これが、アカウント用データベースを拡張するときの基本です。

何を保存するかで、増え方も違う

OAuthクライアントやポリシーなどのテナント設定、ユーザーのアカウントと個人情報、メールアドレスなどから保存先を探すための索引。Authrimでは、これらを別々に保存しています。

ユーザーが増えたからといって、すべてのデータベースを一緒に増やす必要はありません。アカウント用と検索用では、必要な件数も増加のペースも違います。それぞれの状況を見て、容量を追加します。

テナント設定 OAuthクライアント・ポリシーなど テナントの設定を保存 アカウント/個人情報 アカウント本体とPIIは別系統 登録件数と増加ペースを見る 検索用の索引 メールアドレス等から所在を引く 増加速度を見て先回りで増える 用途ごとに保存先を分け、必要な系統に容量を追加する。
アカウント本体と個人情報は、別のデータベースに保存します。分離の理由は「個人情報の置き場所」で紹介しています。

残りの登録枠を見て、次を用意する

新しいアカウントの保存先は、そのテナントが使えるシャードの中から選びます。健康に動作していて、目標件数に対する割当件数の割合が低いものを優先します。

判断の基準になるのは、ディスクの使用率ではなく、設定した目標アカウント数に対して、あと何件を受け入れられるかです。たとえば目標を10万件とした場合、残り2万件という余裕を、次の保存先を準備する目安にします。

利用できるシャードの余裕が少なくなると、用意してある予備を割り当てます。複数のテナントが同じシャードを使う共有型でも、1つのテナントだけが使う専有型でも、この考え方は変わりません。

共有テナントのみ

A社・B社・C社が同居(区切り線が各社の境界)

専有テナントのみ

A社だけが使う

共有・専有が混在

共有プール 専有:D社 A社・B社・C社が共有 D社が専有
共有・専有・混在のどの配置でも、増えたシャードが新しいアカウントの受け皿になります。水位は割当件数のイメージで、ディスクの使用率や実際の増設時刻を表すものではありません。共有シャード内の区切りは、テナント間の論理的な分離を示しています。

普段の運用で、しなくてよくなること

自動プロビジョニングの設定を済ませれば、登録数が増えるたびに担当者がデータベースを作り、テーブルを用意し、新しい登録先へつなぐ作業を繰り返す必要はありません。既存アカウントの引っ越し計画も、容量を追加するたびには要りません。

担当者が見るのは、増設が進んでいるか、失敗していないか、利用量と費用が想定の範囲かです。権限不足やサービス側の上限で止まれば対応する。この役割分担を前提に、Authrimが次の保存先を用意します。

今日の空きだけでは足りない

残り2万件あっても、1日に100件増えるサービスと、1時間に1万件増えるサービスでは、用意を急ぐ度合いが違います。

そこでAuthrimは、現在の割当件数に加えて、直近の登録ペースから今後必要になる容量を見積もります。アカウント用も検索用も予測の対象です。定期処理は1分おきに動き、アカウントの割当後にも予測を更新します。

必要な量を計算するときは、すでに作成中のシャードも数に入れます。複数の処理が同じ容量不足に気づいても、そのたびに余分なデータベースを作らないためです。

作成から利用開始までをつなぐ

予備だけでは足りないときは、Cloudflareの管理APIを使ってD1を作成します。テーブルを用意し、Workerから参照できるよう設定し、新しい保存先の情報を配布する。読み書きを確認できたものから、割当先として使い始めます。

自動で進めるには、自動プロビジョニングを有効にし、D1用とWorkers用のAPIトークンをそれぞれ設定する必要があります。自動実行できない場合は、運用者がセットアップツールで処理を進める形になります。

作成の途中経過は保存されます。一時的な通信障害なら、その状態をもとに再試行できます。権限不足やリソース上限など、人の対応が必要な理由で止まった場合は、原因を解消してから再開します。

準備が追いつかず登録枠がなくなった場合には、新規登録の再試行が必要になることもあります。先回りして用意するのは、そうした待ち時間をできるだけ減らすためです。

データを動かす判断は、運用者に残す

容量の追加と、既存データの移動は別の操作です。たとえば、共有シャードで始めたテナントを専有シャードに移す場合。新しい登録先を増やすだけでは済まず、すでにあるデータも移す必要があります。

この移行を始めるかどうかは、運用者が判断します。承認を受けた後の同期、検証、切り替えは、Authrimが進めます。

共有シャード A社 B社 C社 複数テナントで 1つのシャードを使う 人が承認 引っ越し 承認が合図になる → 同期・検証・切り替えは自動 1テナントだけが 使う A社 専有シャード
共有から専有へ移す場合は、運用者の承認後にデータを同期し、検証してから切り替えます。この移行には短い書き込み停止を伴う段階があります。

現在、対応している配置変更は共有から専有への移行です。専有から共有へ戻す移行や、既存アカウントを自動で均等に配置し直す機能はありません。

使い終えたシャードの削除にも、人の承認が必要です。使う容量が増えたからといって、既存データの移動や削除まで自動で始まることはありません。

どこまで確かめているか

2026年7月のテストデータによる計測では、20万アカウントを保存した時点で、Coreが約208MB、PIIが約238MB、Lookupが約426MBでした。それぞれ、有料プランの1データベースあたり10GBという上限に対して5%未満です。保存する属性や索引によって、実際の使用量は変わります。

目標アカウント数の初期値は、1シャードあたり10万件です。物理的に入るだけ詰め込むのではなく、次を用意する余裕を残しています。

Authrimはpre-1.0で、この仕組みの長期間・大規模な本番運用での実績は、これから積み上げていく段階です。20万件の保存容量を測った結果と、数百万人が日々使う環境での運用実績は、分けて見ています。

成長のたびに、移行計画を立てずに済むように

小さなサービスのうちから、大規模な構成を用意しておく必要はありません。少ないシャードで始めて、登録の増え方に合わせて保存先を足していく。そのための準備と手順を、Authrimの中に組み込んでいます。

ユーザーが増えてきたときに、まずデータベースの引っ越しを考える。その仕事を減らして、サービスを育てるほうに時間を使えるようにしたいと考えています。

容量の計測:2026年7月30日、テスト環境の20万アカウント。MBは10進表記。D1の容量上限はCloudflareの公式仕様