Skip to content

DB設計ガイドライン

Database Design Guidelines

はじめに

DB設計に関するガイドラインとして、PostgreSQL設計ガイドラインとDynamoDB設計ガイドラインの2本を提供する。各文書の位置づけと前提は本ページの各セクションを参照。

免責事項

  • 有志で作成したドキュメントである。フューチャーには多様なプロジェクトが存在し、それぞれの状況に合わせて工夫された開発プロセスや高度な開発支援環境が存在する。本ガイドラインはフューチャーの全ての部署/プロジェクトで適用されているわけではなく、有志が観点を持ち寄って新たに整理したものである
  • 相容れない部分があればその領域を書き換えて利用することを想定している。プロジェクト固有の背景や要件への配慮は、ガイドライン利用者が最終的に判断すること。本ガイドラインに必ず従うことは求めておらず、設計案の提示と、それらの評価観点を利用者に提供することを主目的としている
  • 掲載内容および利用に際して発生した問題、それに伴う損害については、フューチャー株式会社は一切の責務を負わないものとする。掲載している情報は予告なく変更する場合がある

PostgreSQL設計ガイドライン

本ガイドラインはPostgreSQLを使用する開発者向けに、DBのテーブルやカラムの命名・型桁・制約などのスキーマ管理に加え、履歴・排他制御・マルチテナント対応などアプリケーション設計を含む内容についての設計標準を紹介する。これによりDB設計の主な論点/設計項目/設計観点を提供することで、開発者の考慮漏れを防ぐとともに、チームでの設計上の合意形成を手助けし、システム開発における標準ラインとなる設計手法を提供することでナレッジやツールの横展開を容易にすることを目指す。

前提条件

作成にあたって以下の想定を持つ。

  • 利用データベース:PostgreSQL
  • ワークロード: OLTP(オンライントランザクション処理)の業務システム開発
  • 主にクラウド上のマネージドサービスの利用(Amazon Auroraを利用など)

DynamoDB設計ガイドライン

AWS が提供するフルマネージドな NoSQLデータベースサービスである、DynamoDBの技術選定・命名・データモデリング・パーティショニング・性能・費用・監視・運用・セキュリティなどの考慮すべき設計事項と推奨案をまとめる。

適用範囲

DynamoDB を利用してシステムを構築する全てのエンジニアおよびアーキテクトを対象とする。業務システムの開発を想定しており、開発スピードの優先度が高いPoCや、学習目的の趣味の開発は除く。数名以上の開発チームがあり、運用保守まで見据え、安定して動作することが求められるとする。

対象外となる事項は以下の通り。

  • DynamoDB の詳細なAPIリファレンスや具体的なコーディング実装例を網羅するものではない。それらについては、AWS公式ドキュメントや各プログラミング言語のSDKドキュメントを参照すること
  • DynamoDBをセッションストレージのような、限定的な用途で使うようなケース。本ガイドラインの内容は要件に対して過剰な設計になる可能性がある
  • 特定のビジネス領域やアプリケーション固有の要件に特化した設計判断については、本ガイドラインの原則を踏まえつつ、各プロジェクトで個別検討すること
  • DynamoDBを利用する前提として、AWSそのものの命名や設計が必要になる。AWSインフラ命名規約AWS設計ガイドライン を参考にすること
  • インフラ構築はTerraformなどのプロビジョニングツールの利用を推奨する。Terraform設計ガイドライン を参考にすること

用語

用語説明
読み込みキャパシティユニット(RCU)1秒あたりに読み込み可能なデータ量の単位
書き込みキャパシティユニット(WCU)1秒あたりに書き込み可能なデータ量の単位
カバードクエリクエリ対象のすべての属性がインデックスに射影(プロジェクション)されており、テーブル本体への読み込み無しで結果を返せるクエリ
TTL (Time To Live)アイテムに有効期限のタイムスタンプを設定し、期限が切れたアイテムを自動的にテーブルから削除する機能
未処理のアイテム (UnprocessedItems)BatchGetItemやBatchWriteItemなどのバッチ処理で、プロビジョニングされたスループットの不足などにより、処理しきれなかったアイテム
条件付き書き込み (Conditional Writes)特定の条件が満たされた場合にのみ書き込みを操作する仕組み
冪等性同じ処理を複数回実行しても、結果が常に同じになる性質
DLQ (デッドレターキュー)処理に失敗したメッセージやイベントを隔離するためのキュー

謝辞

このアーキテクチャガイドラインの作成には多くの方々にご協力いただいた。心より感謝申し上げる。

PostgreSQL設計ガイドライン:

  • 作成者: 真野隼記、武田大輝、宮崎将太、澁川喜規、村田靖拓、岸本卓也、関根直弥、清水雄一郎
  • レビュアー: 杉江伸祐、二村暢之、佐々木伸悟、辻大志郎、尾崎駿

DynamoDB設計ガイドライン:

  • 作成者: 真野隼記、後藤玲雄、武田大輝、村田靖拓、村瀬善則、宮崎将太、市川燿、山本竜玄、澁川喜規
  • レビュアー: 八木雅斗、大江聖太郎

Articles