大量のテキストを格納する列が1つあるアプリケーションを設計しています。テキストをデータベース自体に保存する必要があるのか、またはデータベースがGoogle Cloud StorageやAmazon S3などのオブジェクトストアへの参照を保存する必要があるのか、アプリケーションがその参照を使用してこれらのサービスからプルするのかについては、議論しています。オブジェクトストアは、GBあたりのストレージコストがデータベースよりも大幅に安いと考えています。しかし、私はこれを行う際に何をトレードオフするのか不確かです。
では、オブジェクトストアとは対照的に、大きなバイナリデータをデータベースに格納することにはどのようなトレードオフがありますか?
楽器の法則 は、次のことを示しています。
ハンマーを手に持っていると、あらゆる問題が釘のように見え始めます。
そのため、ソリューションにすばやく移行する前に、ニーズと要件を客観的に見てください。特にセキュリティのニーズ、アクセス制御、トランザクションの一貫性の要件。
DBのBlob:
長所:
小さいテキストBLOBはテキストフィールド(たとえば、Postgresqlでは最大1GB)に収まるため、クエリでコンテンツを使用できます。
短所:
オブジェクトストアのBlob
長所:
短所:
現在のコンテキストがこの評価に影響を与える可能性があります。たとえば、すでにいくつかのクラウドサービスとID管理がアクティブになっている場合、これは短所ではなくなります。または、現在のデータベースのblobの制限が非常に小さい場合(Mongodbなど)、オブジェクトストアの短所の多くは、とにかく気にする必要があるため、関係ありません。
私は同じ議論をしていますが、結論は異なります。問題のステートメントは、保存する必要のある大きなテキストオブジェクトがあるということですが、ストレージの外で実行する必要があるアクションについては触れていません。
結論:
あきらめるのは:
データベースは通常、最大約1MBのblobストレージで効率的であり、それを超えると、ほとんどのデータベースはそれらのblobをデータベースの外部に格納することを推奨します(特に、Microsoft SQL Serverが推奨します)。簡単にデータベースを膨らませて、複製、バックアップ、および復元のロジスティックスを難しくすることができます。
クリストフとベリンの両方が考慮事項について良い点を作っていると思います。私はこれらを繰り返さないが、これに関する個人的な経験に基づいていくつかの基本的なアドバイスを提供します。
データベースが格納したいLOBをサポートでき(それらがプラットフォームの制限内にあり)、これらのLOBに割り当てられた合計スペースが合計DBストレージの大きな割合ではない場合、DBの使用を回避する強力なドライバーはありません。このため。追加された複雑さは、DBからLOBを削除したい理由が他にない限り、おそらく価値がありません。
ただし、LOB用にDBストレージの大部分を使用する必要がある場合は、たとえば、 50%以上の場合は、検討する価値があります。 LOBをDBに追加することはできますが、リレーショナルデータベースが意図するものではありません。つまようじが必要なため、スイスのアーミーナイフを購入するようなものです。