web-dev-qa-db-ja.com

大きなblobのオブジェクトストアでデータベースを使用するのはいつですか?

大量のテキストを格納する列が1つあるアプリケーションを設計しています。テキストをデータベース自体に保存する必要があるのか​​、またはデータベースがGoogle Cloud StorageやAmazon S3などのオブジェクトストアへの参照を保存する必要があるのか​​、アプリケーションがその参照を使用してこれらのサービスからプルするのかについては、議論しています。オブジェクトストアは、GBあたりのストレージコストがデータベースよりも大幅に安いと考えています。しかし、私はこれを行う際に何をトレードオフするのか不確かです。

では、オブジェクトストアとは対照的に、大きなバイナリデータをデータベースに格納することにはどのようなトレードオフがありますか?

2
chris.mclennon

楽器の法則 は、次のことを示しています。

ハンマーを手に持っていると、あらゆる問題が釘のように見え始めます。

そのため、ソリューションにすばやく移行する前に、ニーズと要件を客観的に見てください。特にセキュリティのニーズ、アクセス制御、トランザクションの一貫性の要件。

DBのBlob:

  • 長所:

    • データベースのアクセスセキュリティとそのバックアップ戦略のメリット
    • 不正な第三者のアクセスに対する機密性(例:政府または軍事関連の場合)
    • 同種アクセスによるアーキテクチャの簡素化
    • dbがオンプレミスであり、内部ユーザーが多数いる場合の外部帯域幅の減少。
    • blobはトランザクションの整合性で管理され、残りのデータは
  • 小さいテキストBLOBはテキストフィールド(たとえば、Postgresqlでは最大1GB)に収まるため、クエリでコンテンツを使用できます。

  • 短所:

    • dbの技術的な制限(たとえば、Postgresqlでは1 GB、SqlServerでは2 GB未満、Oracleでは4 GB、MongoDbのGridFS経由でのみサポート)
    • データベースのサイズを大幅に増やします
    • 特にストレージが初期の想定を大幅に超える場合は、dbの運用コストを増加させます。
    • 高価なインフラストラクチャの浪費( ティア1ディスクスペース 頻繁に使用されるdbデータを意味しますが、頻繁にアクセスされず、ティア2または3に移動する可能性のあるオブジェクトを格納するために誤用されます)。

オブジェクトストアのBlob

  • 長所:

    • 市場で非常に効果的で専門的なソリューション
    • 費用対効果の高い
    • セットアップが簡単
    • 耐障害性(オファーによって異なる)、バックアップを含む
  • 短所:

    • ミッションクリティカルなアプリケーションの場合のアクセシビリティのリスク(例:プロバイダーまたはインターネットアクセスポイントでのサービス拒否攻撃の場合)
    • 機密性リスク(ただし、IMHOは政府および軍事関連の機密性の高い機密情報にのみ適用されます)
    • 追加のアクセスセキュリティが必要になる場合があります(例:AWS ID管理およびACL管理)
    • トランザクションの一貫性の側面に注意する必要があります(たとえば、関連するdbの変更に関して、blobの更新が失敗した場合の対処)

現在のコンテキストがこの評価に影響を与える可能性があります。たとえば、すでにいくつかのクラウドサービスとID管理がアクティブになっている場合、これは短所ではなくなります。または、現在のデータベースのblobの制限が非常に小さい場合(Mongodbなど)、オブジェクトストアの短所の多くは、とにかく気にする必要があるため、関係ありません。

4
Christophe

私は同じ議論をしていますが、結論は異なります。問題のステートメントは、保存する必要のある大きなテキストオブジェクトがあるということですが、ストレージの外で実行する必要があるアクションについては触れていません。

結論:

  • Blobストレージは安価で高速、そして約 seven nines の稼働時間
  • 一般的に安全性が高く、トラフィックを適切に制御できます。
  • 一般的なストレージのニーズに最適

あきらめるのは:

  • 高速検索のためにテキストにインデックスを付ける機能。ElasticSearchをサービスとして使用して、そのニーズを満たすことができます。

データベースは通常、最大約1MBのblobストレージで効率的であり、それを超えると、ほとんどのデータベースはそれらのblobをデータベースの外部に格納することを推奨します(特に、Microsoft SQL Serverが推奨します)。簡単にデータベースを膨らませて、複製、バックアップ、および復元のロジスティックスを難しくすることができます。

3
Berin Loritsch

クリストフとベリンの両方が考慮事項について良い点を作っていると思います。私はこれらを繰り返さないが、これに関する個人的な経験に基づいていくつかの基本的なアドバイスを提供します。

データベースが格納したいLOBをサポートでき(それらがプラットフォームの制限内にあり)、これらのLOBに割り当てられた合計スペースが合計DBストレージの大きな割合ではない場合、DBの使用を回避する強力なドライバーはありません。このため。追加された複雑さは、DBからLOBを削除したい理由が他にない限り、おそらく価値がありません。

ただし、LOB用にDBストレージの大部分を使用する必要がある場合は、たとえば、 50%以上の場合は、検討する価値があります。 LOBをDBに追加することはできますが、リレーショナルデータベースが意図するものではありません。つまようじが必要なため、スイスのアーミーナイフを購入するようなものです。

1
JimmyJames