添付ファイル格納方式の選択基準を知りたい
回答¶
添付ファイルの格納方式は、設定ファイルBinaryStorage.jsonのパラメータProviderで設定できます。Providerの値はRdsまたはLocalから選択します。
以下の比較表と本ページの説明を参考に検討してください。
| 項目 | Rds(データベース格納) | Local(ローカルストレージ格納) |
|---|---|---|
| 推奨規模 | 10 Gバイト未満 | 数十Gバイト以上 |
| 整合性 | 高 (トランザクション保証) | 中 (運用でカバー) |
| バックアップ | シンプル (データベースのみ) | 複雑 (データベース+ファイル) |
| クラスタ対応 | 容易 | 共有ストレージ必須 |
| パフォーマンス | ファイル増加で低下 | データベース 負荷を軽減 |
概要¶
添付ファイルの格納方式は、設定ファイルBinaryStorage.jsonのパラメータProviderで設定できます。Providerの値はRdsまたはLocalから選択します。
- Rds(データベース格納)
添付ファイルをデータベースのBinariesテーブルのBin列に格納します(初期値)。 - Local(ローカルストレージ格納)
添付ファイルをファイルシステムに格納し、管理情報のみをデータベースのBinariesテーブルに格納します。
添付ファイルが少ない場合はRds(データベース格納)のままで問題ありませんが、添付ファイルが多い場合はLocal(ローカルストレージ格納)への変更を検討してください。
Rds(データベース格納)の特性¶
①メリット¶
- ファイルとメタデータがトランザクション内で一貫管理される
- バックアップはデータベースのみで完結するため、運用がシンプル
- データベース権限のみでアクセス制御が可能
②デメリット¶
- 大容量ファイルによりBinariesテーブルが肥大化する
- バックアップ・リストアの所要時間が長くなる
- 大量ファイル操作時にデータベースリソースを圧迫する
- データベースごとに異なる容量制限(後述)を受ける
③推奨するケース¶
- 添付ファイルの総容量が数Gバイト未満
- 1ファイルあたりの容量が10Mバイト以下が中心
- データの整合性を最優先したい
- バックアップ運用をシンプルに保ちたい
ローカルストレージ格納(Local)の特性¶
①メリット¶
- Binariesテーブルは数Kバイト程度のメタデータのみとなり、データベースを軽量に保てる
- ファイル容量の制約がOS・ファイルシステム依存になる
- ファイル入出力とデータベース入出力を別ディスクに分離できる
- 共有ストレージへ拡張しやすい
②デメリット¶
- データベースとファイルストレージを別々にバックアップする必要がある
- 複数Webサーバ構成では共有ストレージが必須
③推奨するケース¶
- 添付ファイルの総容量が数十Gバイト以上
- 1ファイルあたりの容量が数百Mバイト以上を扱う
- バックアップ時間を短縮したい
- データベースのパフォーマンスを優先したい
- 複数Webサーバ構成で共有ストレージが利用可能
データベースごとの容量制約¶
各データベースでのバイナリデータ格納には、以下の容量制約があります。
| データベース | データ型 | 理論上の上限容量 | 実用上の推奨容量 |
|---|---|---|---|
| SQL Server | IMAGE | 2 Gバイト | 数百Mバイト以下 |
| PostgreSQL | BYTEA | 1 Gバイト | 数百Mバイト以下 |
| MySQL | LONGBLOB | 4 Gバイト | 数百Mバイト以下 * |
*MySQL環境で大容量ファイルを扱う場合はmax_allowed_packetの設定を調整する必要があります。
my.cnfまたはmy.iniでの設定例
上記はデータ型の制約です。実際には各データベースのページサイズ、バッファ設定、ネットワーク設定なども影響します。数百Mバイト以上のファイルを頻繁に扱う場合は、データベースパフォーマンスの観点からLocal(ローカルストレージ格納)を推奨します。
運用上のベストプラクティス¶
各格納方式において、以下の実施を推奨します。
Rds(データベース格納)の場合¶
- Binariesテーブルの容量を定期的に監視する
- 定期的なVACUUM実行(PostgreSQL)またはインデックス再構築(SQL Server)を実施する
- バックアップ所要時間を継続的に監視する
Local(ローカルストレージ格納)の場合¶
- ファイル格納ディレクトリは、データベースのバックアップと同頻度・同タイミングでバックアップする
- 孤児ファイルの定期的なクリーンアップを実施する
- 共有ストレージの容量IOPSを監視する
- ファイルシステムとデータベースの整合性を定期的に確認する
クラスタ構成下での設定¶
クラスタ構成下での設定については、以下のマニュアルを確認してください。
パラメータ設定:BinaryStorage.json
追加設定:クラスタ化への備え:バックグラウンドサービスを複数インスタンス構成に対応させる
追加設定:クラスタ化への備え:添付ファイルのアップロード・登録に関する設定
追加設定:クラスタ化への備え:添付ファイルをローカルストレージ格納する設定
パラメータ設定:Quartz.json


