web-dev-qa-db-ja.com

より良い/より速いものは何ですか? MySqlまたはFileSystem?

人のディレクトリであるWebサイトを想像してみましょう。それぞれの人にプロフィール写真と伝記があるかもしれません。

私は[〜#〜] sql [〜#〜]クエリの方が良いことを認めますが、一般的に何がより速く、より少ない処理能力を使用するでしょう。

ファイルが存在するかどうかを確認してから開くには、または

mySqlをチェックして、略歴が存在するかどうかを確認し、表示します。

上記の場合、ファイルシステムはmysqlデータベースをスモークします。

データベースを読み取り専用の区切りテキストファイルにするとどうなりますか?

この場合、何が速くなりますか?

Txtファイルにレコードが多すぎる場合、MySqlを使用する方がよい特定のポイントはありますか?

ファイルシステムは、オペレーティングシステムが一種のインデックスを維持しているため、特定のファイルを探している場合に役立ちます。ただし、txtファイルの内容はインデックスに登録されません。これは、データベースの主な利点の1つです。もう1つは、リレーショナルモデルを理解することです。これにより、データを何度も繰り返す必要がなくなります。もう1つはタイプを理解することです。 txtファイルがある場合は、数値、日付などを解析する必要があります。

したがって、ファイルシステムは、場合によっては機能することもありますが、すべてが機能するわけではありません。

17
Rob Farley

それは本当にあなたが何をしているかに依存します。一般に、ファイルを読み取り用に開くことができる速度は、ネットワーク接続を確立できる速度よりも優れています。したがって、非常に単純な操作の場合、ファイルシステムは間違いなく高速です。オーバーヘッドが少ないので、ファイルシステムはおそらく生の読み取りスループットでもRDBMSに勝るでしょう。実際、考えてみると、データベースは、生のスループットの点で、それが置かれているファイルシステムよりも速くなることはありません。

非常に複雑な操作の場合、ファイルシステムは非常に遅くなる可能性があります。例えば:

この10億行のファイルから10行を読み取り、この他のファイルで一致する行を検索します。あなたがこれをしなければならないなら、私はあなたに同情します。ただし、優れたデータベースサーバーには、これを迅速かつ適切に行うための戦略があり、車輪を再発明する必要はありません。

さらに、あなたは本当にあなたがやっているwhatを理解する必要があります。どのデータを保存していますか?どのように変換しますか? 100kの画像ファイルの場合、ソリューションは100k人のディレクトリの場合とは非常に異なります。 (LDAPかもしれませんか、それともSQLデータベースですか?おそらくあなたが何をしているのかに依存します。)ここで重要なのは、あなたがしていることに一致し、いくつかの最も速いと思われるものではなく、用途を追加する余地を与えるツールを選択することです。むしろ抽象的なユースケース。データベースは素晴らしいツールですが、このような質問に対して適切な答えを得ることができません。

最後に、時期尚早の最適化はすべての悪の根源です。ここで有用なツールを選択し、残りを後で理解してください。

12
Chris Travers

ファイルシステムは最初はもっと速いかもしれませんが、私はそれを疑っています。ただし、データサイズが増加すると、パフォーマンスを維持するためにファイルシステムを再構築する必要が生じる可能性があります。複数の属性にインデックスを付ける明らかな機能に加えて、データベースは拡張性が向上する傾向があります。

検討しているものと同様に機能するWebキャッシュは、ディレクトリツリーを使用してパフォーマンスを維持します。また、規模が比較的固定されている傾向があるため、規模の拡大に対応する必要はありません。

この種のアプリケーションの場合は、データベースがユーザーのニーズにより適合するため、データベースから始めます。長い目で見れば、より適切にスケーリングされます。ほとんどのファイルシステムと比較して、データベースはスペース効率も高くなります。

5
BillThor

私はいつもこれらのフォーラムにアクセスして、ファイルシステムがデータベースほど速く実行できないという重いデータベースの教祖をすべて読むことが好きです。まったく逆に、適切にレイアウトされたツリー、適切に設計されたハッシュテーブル、およびオブジェクトとしてファイルに保存すると、データベースと同じ速度でテストできます。適切に設計されたハッシュテーブルとディレクトリツリーが常に勝ちます。オーバーヘッドがはるかに少なくなります。最近、私はデータベース駆動型プログラミングから離れ、ファイルツリーでより簡単になり、プログラムの移植性を高めています。 DBがない場合は、ツリーを圧縮して移動するだけで簡単にバックアップできます。小規模なアプリケーションを使用する1回限りのクライアント向けに、この方法でプログラムすることは非常に適切であり、推奨事項です。大きな写真を見て、自分で設計する時間があるのか​​、それともdbのようにすでにそこにあるものを活用するだけの時間があるのか​​。私は個人的にオブジェクトをファイルに保存し、後でそれらを使用するのが好きです。テーブルのサイズに注意し、RandomAccessFileを使用してデータベースのようにすばやくレイアウトしてハッシュテーブルオブジェクトに分割できるようにすることを検討してください。 。楽しい。コードによっては、ファイルに格納するデータがメモリ使用量を2倍に消費することを覚えておいてください。ハッシュテーブル自体と、通常は表示するために消費する場所。

1
JDeCarlo