データベース
データを保存し、すばやく取り出す。
データベース
この棚にあるもの
データを保管し、すばやく取り出す場所です。リレーショナルエンジン、ドキュメントストア、キーバリューのキャッシュ、検索インデックス、時系列ストア、そしてそれらを代わりに運用してくれるマネージドサービスがあります。
ほとんどのチームに必要なのは、提供企業の言うよりも少ない数です。リレーショナルデータベース1つで、大半のアプリケーションは長い間まかなえます。2つ目のエンジンを足せば、2つ目の障害の種類、バックアップ、それを理解する人も必要になります。
そのデータの分析とレポート作成は、アナリティクスに入ります。アプリケーション自体が動く場所は、ホスティングとクラウドです。
エンジンの選び方
出発点は、データの形と、そのデータに問いかける内容にしてください。
リレーショナルエンジンは、関係、トランザクション、制約、レポートが絡むものに向いており、これは大半の業務ソフトウェアに当てはまります。
そのほかは専門家です。ドキュメントストアは、形が異なり、通常は丸ごと読み出されるレコードに向いています。キーバリューストアは、単純な検索の速度のためにあります。検索インデックスがあるのは、ある規模でリレーショナルのテキスト検索では足りなくなるからで、時系列ストアがあるのは、メトリクスが何よりも速く届くからです。
誠実な既定の選択は、不十分だと証明されるまではリレーショナルエンジンです。存在しないスケーリングの問題を避けるために、特殊なストアから始めたチームは、たいていそれとは別の、より悪い問題に先に出会います。
ブランドよりも互換性のほうが重要です。広く実装されたプロトコルを話すエンジンは、ツール、ドライバー、採用、そして出口を与えてくれます。独自のインターフェースが与えるのは、移行プロジェクトです。
マネージド、セルフホスト、サーバーレス
マネージドサービスは割高ですが、パッチ適用、バージョンのアップグレード、フェイルオーバー、バックアップの検証といった、都合の悪い時間にやることになる作業を取り除いてくれます。
セルフホストは、帳簿上は安く、実際に安くなるのは、そのスキルがすでに社内にあるときだけです。ディスクがいっぱいになった晩に費やす時間も含めて、工数を正直に数えてください。
サーバーレスの製品は、負荷に応じて容量を伸縮させ、アイドル時の課金は少なくて済みます。トラフィックにむらがある場合に向いていて、開発環境にはさらに向いています。コールドスタートの挙動、接続数の上限、止まらないバックグラウンドジョブを計測がどう扱うかを確認してください。
信頼性を決める質問
- バックアップ。頻度、保持期間、任意の時点を指定して復元できるか。
- 復元。自社のデータ量でフル復元にかかる時間。約束ではなく、検証した数字で。
- フェイルオーバー。自動か手動か、どのくらいかかるか、その間アプリケーションに何が見えるか。
- レプリケーション。リードレプリカ、クロスリージョンのコピー、コードが許容しなければならない遅延。
- 接続数。上限と、プーリングが含まれているのか、自分で動かすものなのか。
トライアル中に、復元を一度実行してください。誰も復元したことのないバックアップは希望にすぎず、希望が最も高くつくのがこのカテゴリです。
成長、マイグレーション、あとで痛む部分
大きなテーブルでのスキーマ変更は、週末を台無しにする作業です。トラフィックが続く中で、列の追加、型の変更、インデックスの作成をエンジンがどう扱うかを尋ねてください。
マイグレーションは、初日からアプリケーションと並べてバージョン管理に置きます。代わりに、コンソールで手作業の変更を適用すると、誰にも再現できない形で食い違う環境ができあがります。
データの置き場所にも注意してください。アプリケーションと別のリージョンにあるデータベースは、すべてのクエリに遅延を加え、1ページで50回クエリを発行するアプリケーションでは、はっきりと体感されます。
請求額の組み立て
コンピュート、ストレージ、バックアップのストレージ、ネットワークのエグレス、そして一部のサービスでは読み書きの単位です。
エグレスは、人々を驚かせる項目で、特に分析やレプリカがリージョンをまたいで大量のデータを引き出すときに目立ちます。ストレージはひとりでに縮むことはまずないため、削除した行も、メンテナンスが走るまで課金され続けることがあります。開発用とステージング用のコピーは、サイズを小さくするか夜間に止めない限り、すべてを2倍にします。
今日の量ではなく、その3倍の量で価格がどうなるかを尋ねてください。それが実際に払う数字だからです。関連する習慣は、料金ページが隠していることにまとめています。
データベースを退屈なままに保つ習慣
このカテゴリの目標は、ドラマが起きないことで、少数の習慣がその大半を生み出します。
マイグレーションはバージョン管理に置き、すべての環境で同じように適用してください。コンソールで手作業の変更をすると、あとで誰にも再現できない違いが生まれます。
インデックスは意図して追加し、ときどき見直してください。使われていないものは、無害に見えながら、書き込み性能とストレージを消費します。
低速なクエリの監視は、障害のときではなく、日課として行ってください。今日4秒かかるクエリは、テーブルが育った来四半期には障害になります。
そして、バックアップの復元をスケジュールに組み込みます。一度も復元されたことのないコピーはファイルであって安全策ではなく、それを遅れて知ることが最も高くつくのが、このカテゴリです。
よくある質問
マネージドサービスとセルフホスト、どちらを選ぶべきですか?
マネージドは月額が高く、パッチ適用、アップグレード、バックアップ、夜間に誰かが起きている必要があることまで数えれば、総額は安く済みます。セルフホストが引き合うのは、すでに運用スキルがあり、配置やチューニングを自分で管理する必要があるときです。
データベースにおけるサーバーレスとは、どういう意味ですか?
負荷に応じて容量が伸縮し、アイドル時のコストはほとんど、あるいはまったくかかりません。トラフィックにむらがある場合や開発環境に向いています。コールドスタート、接続数の上限、バックグラウンドジョブが常時動いているときの請求額には注意してください。
ベンダーロックインを避けるには、どうすればいいですか?
ほかの場所でも動かせるオープンな実装のエンジンを選び、スキーマの変更はマイグレーションファイルで管理し、素のインスタンスへの復元を一度試してください。独自拡張が、乗り換えをいつの間にか高くつくものにしています。
データベースは、アプリケーションに対してどこに置くべきですか?
同じリージョンに、できれば同じゾーンに置きます。1クエリあたり数ミリ秒でも、アプリケーションが50回発行すれば1ページあたり数秒になり、置き場所の悪いプライマリは、どれだけキャッシュしても隠せません。
料金は通常、どう計算されますか?
コンピュート、ストレージ、バックアップ、ネットワークのエグレス、場合によっては読み取りユニットが、別々に課金されます。最初の満額の月で、思ったより大きく表れるのは、エグレスとクロスリージョンのレプリケーションの2項目です。