2010-11-25 14 views
0

ファイルを保存する方がよいでしょうか?ファイルをデータベースに直接保存するか、そのファイルの場所に保存しますか?ファイルをデータベースに格納するか、そのファイルの場所だけを格納する必要がありますか?

+0

どのデータベースをお使いですか? –

+0

私は驚いています - この質問はまだ開いている議論/議論にありますか?そして、それは重複していない、うーん... –

答えて

2

回答をすばやく受け入れると、より多くのユーザーから回答が得られることはありません。

によって異なります。あなたはいくつかのことを考慮する必要があります。

  1. あなたはそれが(すべてのSELECTのブロブを読んで、別の領域にブロブを格納しない)適切ブロブを処理しないことを意味し、ミッキーマウスのフリーウェアのデータベースを持っている場合は、外部のファイルを保持します。

  2. エンタープライズデータベースを使用している場合、データベース内にブロブを保持することは問題ありません。これらはすべてのSELECTでブロブを読み取るわけではありません。 BLOBを取得するための追加読み込みは、「パフォーマンス」の「問題」ではありません。

  3. ほとんどのデータベースは、8kまたは16kではなく2kページです。あなたのページサイズが大きい場合は、最後のページの未使用部分に、ブロブごとに少しの無駄があります。

  4. blobをデータベースに保存することの欠点は、データベースのバックアップがはるかに大きくなることです。いくつかのエンタープライズ・データベースは、ページが変更されていないことを認識し、それを増分バックアップから除外します。他には増分がありません。

  5. データベースにブロブを保存する利点は、データと参照整合性です。あなたは、ブロブと同期して行を消すという問題はありません。

    • 私は昨年、データベースの130GBのデータと、dbの外に保存された700GBのデータを持っていました。 10年間の問題を経て、彼らは弾丸に噛み付き、文書をdbに移動しました。参照が絶対に正しいと思われるので、単純な仕事(長くてもシンプルな仕事)になっていたものは、重複してしまい、無効な参照が多かったからです。結果として得られたデータベースは630GBでした。100GBのダブがありました。 2Kページのサイズ。コメントへ

応答

  1. スラッシュまたはバックスラッシュ
    簡単。データベースでは、スラッシュのみを格納します。ターゲットシステムを特定する方法と、IsWindozeインジケータが必要です。これは、テーブル階層の上位にあり、Filenameのレベルではありません。インジケータが設定されている場合は、Filename列を表示または表示するたびに、スラッシュをバックスラッシュに変更します。
    DriveLetterとUnixにはないコロンで同様の問題が発生します。
+0

おかげで、私はseveralsを読んだ後に答えを受け入れるほうがよいでしょう。 –

+0

私は異なる種類のOS上にある可能性があるシステムにファイルを格納しなければならず、遭遇するばかげたことの1つは、ファイルの物理パスのスラッシュ(/)またはバックスラッシュ(/)です。 –

+1

@Truong:ありがとう。私は自分の答えに回答を追加しました。 – PerformanceDBA

4

データベースにファイルを格納しないようにしてください。大部分は彼らとよく対処しません。

+1

追加するだけで、それは一般的に悪い考えです - リモートで実行可能になる唯一の時間は、レコードがメモリ内にあることを保証できるデータベースを扱うときですあなたがそれを必要としたときに、そこから奉仕しました。しかし、ほとんどの状況下では、ファイルシステムはより良い場所です。 – Arantor

+0

私はファイルシステムがこれのために長年の間素晴らしいですが、10 MBのdbより大きいファイルを格納するのが難しいと思う。 –

+0

まだMySQLのBLOBとCLOBが何であるのか分からないのですか? –

0

ファイルシステムにファイルを保存し、ファイルの場所をデータベースに保存することをお勧めします。この理由は、データベースが物理的にディスク上に(通常は8Kまたは16Kチャンクで)領域を割り当てる方法と関係があります。そこに大きなファイルをドロップすると、データベースはファイルを格納するさまざまなメカニズムを使用します(SQL Serverはこれをrow overflow dataと呼びます)。通常、これらの種類のページは通常の表の外に配置されているため、行の論理読取りではディスク上で2回の物理読取りが行われます。言うまでもなく、これはパフォーマンスにはあまり適していません。

1

最新の回答:エンジンによって異なります。

  • 1990年代以降、SQL Serverでは2kのページサイズが使用されていませんでした。 Oracleはデフォルトで8K、SQL Serverは8Kです。 Sybase AFAIKのみが、過去1世紀にはまだ存在しています。

    Oracleは、ディスクとバックアップの圧縮にBFILE

    で長く

  • SQL ServerとOracleの提供を行っているよう

    SQL Serverは、今私が」、両方の長所を兼ね備えFILESTREAMを提供しています

  • 確かにPostgresSQLは少なくとも同様の機能を提供します。

    注:これは主にPerformanceDBAのFUDの代替品を提供することです

  • 関連する問題