39

私はグーグルを見回しましたが、良い答えは見つかりませんでした。データは 1 つの大きなファイルに保存されますか? 通常のファイルの読み取りと書き込みよりも高速にデータ アクセスを行うには、どのような方法を使用しますか?

4

4 に答える 4

24

データは 1 つの大きなファイルに保存されますか?

一部の DBMS はデータベース全体を単一のファイルに格納し、一部の分割テーブル、インデックス、およびその他のオブジェクトの種類を別のファイルに格納し、一部の分割ファイルはオブジェクトの種類ではなくストレージ/サイズの基準によって分割し、ファイル システムを完全にバイパスできるものもあります。 ...

MySQL がこれらの戦略のどれを使用するかはわかりません (おそらく、MyISAM と InnoDB などを使用するかどうかによって異なります)。ほとんど心配する必要はありません。

通常のファイルを読み書きするだけで、データアクセスを高速化するためにどのような方法を使用しますか?

まず第一に、DBMses はパフォーマンスだけではありません。

  • データの安全性についてはさらに重要です。停電やネットワーク障害が発生した場合でも、データが破損しないようにする必要があります。1
  • DBMS は並行性にも関係しています。同じデータにアクセスし、場合によっては変更する複数のクライアント間で仲裁を行う必要があります。2

パフォーマンスに関する具体的な質問に関しては、リレーショナル データはインデックス作成とクラスタリングの影響を非常に受けやすく、パフォーマンスを達成するために DBMS によって豊富に利用されています。その上、SQL のセットベースの性質により、DBMS はデータを取得するための最適な方法を選択できます (少なくとも理論的には、一部の DBMS は他の DBMS よりも優れています)。DBMS のパフォーマンスの詳細については、次のことを強くお勧めします。Luke さん、Index を使用してください。

また、ほとんどの DBMS がかなり古い製品であることにもお気付きでしょう。何十年も前のように、これは私たちの業界で言うと本当に長い年月です。その結果の 1 つは、DBMS コード ベース全体を最適化するための十分な時間があったことです。

理論的には、ファイルを介してこれらすべてを実現できますが、最終的には非常に DBMS に近いものになると思います (実際にそれを行う時間とリソースがあったとしても)。では、なぜ車輪を再発明する必要があるのでしょうか (そもそも車輪が欲しくなかった場合を除きます ;))?


1通常、ある種の「ジャーナリング」または「トランザクション ログ」メカニズムを使用します。さらに、"論理" 破損 (アプリケーションのバグによる) の可能性を最小限に抑え、コードの再利用を促進するために、ほとんどの DBMS は宣言型の制約 (ドメイン、キー、および参照)、トリガー、およびストアド プロシージャをサポートしています。

2トランザクションを分離し、クライアントがデータベースの特定の部分を明示的にロックできるようにすることによって。

于 2012-04-30T11:03:38.773 に答える
5

技術的には、フォルダを含むすべてが「ファイル」です。ハードドライブ全体が巨大なファイルです。そうは言っても、リレーショナル データベースではありますが、MySQL には、ハード ドライブ上のデータ ファイルに格納されたデータが含まれていました。データベースとファイルへの書き込み/読み取りの違いは、リンゴとオレンジです。データベースは、ファイルの読み取りと書き込みだけでは複製できない方法でデータを保存および検索/取得する構造化された方法を提供します.もちろん、独自のデータベースを作成しない限り..

それが役立つことを願っています。

于 2012-04-30T05:11:24.977 に答える
3

データをフラット ファイルに格納すると、コンパクトで効率的に順次読み取ることができますが、ランダムにアクセスする高速な方法はありません。これは、ドキュメント、名前、文字列などの可変長データに特に当てはまります。高速なランダム アクセスを可能にするために、ほとんどのデータベースは、B ツリーと呼ばれるデータ構造を使用して単一のファイルに情報を格納します。この構造により、挿入、削除、および検索が高速になりますが、元のファイルよりも最大 50% 多くのスペースを使用する可能性があります。ただし、通常、ディスク容量は安価で大きいため、これは問題にはなりませんが、主要なタスクには通常高速アクセスが必要です。詳細情報: http://en.wikipedia.org/wiki/B-tree

MySQL のドキュメントを注意深く調べたところ、オプションでインデックスを「BTREE」または「HASH」タイプに設定できることがわかりました。単一の MySQL ファイル内に、いずれかのデータ構造を使用する複数のインデックスが格納されます。

安全性と同時実行性は重要ですが、これらはデータベースが存在する理由ではなく、追加された機能です。最初のデータベースが存在するのは、可変長データを含むシーケンシャル ファイルにランダムにアクセスすることができないためです。

于 2013-05-29T22:39:27.700 に答える