2012-01-01 3 views
2

私はaccessとmysqlを使用しています...最近、私はLinuxで標準ファイル操作を開始しました。データベースはファイルにデータを格納するため、すべてのSQLトランザクションでファイル操作を実行するのか、またはデータベースを閉じる/開くときにのみファイル操作を実行しますか。私は効率的なデータ構造を使ってRAMにデータを格納し、更新を処理し、ファイルを閉じて接続を閉じるほうが効率的だと思います。 私は今のところ関係代数に興味がありませんが、私の質問に答えるための詳細はどこにありますか?データベースエンジン内部

+0

オープン/クローズ時にデータベースをロード/保存すると、複数のユーザー/接続シナリオがどのように機能すると思いますか?これは明らかにかなり複雑な問題です。 mysqlやpostgresqlのようなデータベースが(公開されている)ソースコードを見直して内部的にどのように動作するかを見直すことは貴重です。 –

答えて

2

ファイルシステムとRAMの議論よりもはるかに複雑です。 MS SQL Serverには、データストレージの方法論が十分に文書化されています(MySQLはアクセスしていると確信しています)。私はMS SQL Serverで私の経験から答えます。

ここで開始するための記事です:私が処理するために 効率的なデータ構造をRAMにデータを格納するのがより効率的に思うだろう

:あなたの質問の周りに少し洞察力を与えるためにhttp://msdn.microsoft.com/en-us/library/ms189051.aspx

アップデートは、接続を閉じるファイル にのみ書き込みます。

  • データベースエンジンは絶対に(インデックスを含む)を読み取り、特にため、パフォーマンスを向上させるためにRAMを使用しています。通常(常にではない)、読取り回数はOLTP環境であっても書込み回数よりも多くなります。データの読み込みは、データを書き込むよりもはるかに高価になります。しかし、データを書き込むには、重大な影響を与える可能性があるロッキングの不利益があります。

  • 実際のバッファリング実装はデータベースによって異なりますが、トランザクションがデータの書き込みに使用されているかどうかによっても異なる場合があります。別の呼び出し元が不正な読み込みを要求した場合など、データベースエンジンが考慮する必要があるものがあります。または操作の途中でシステムに障害が発生した場合はどうすればよいですか?データベースサーバーがクラスタ化または複製されている場合はどうなりますか?これは不可能ではなく、複雑な問題であることを意味します。

  • 完全性保証の1つの例:MS SQL Serverのミラー化環境では、2台のサーバーに書き込みを行い、3台目のサーバーを監視サーバーとして機能させることができます。書き込みは非同期でもよいし、書き込みを同期させてもよい。これは遅くなりますが、データが実際に両方のノードに送信され、両方のノードがその永続化操作が成功したことを確信していることが保証されます(理由は同じです)。

  • 接続が頻繁にプールされ、実際には閉じられないため、開閉は非常に高価です。接続は(プーリングに関係なく)積極的に再利用することができます(しばしばすべきです)。

私はこの記事をMS SQL Serverのバッファ書き込みに興味があります。http://msdn.microsoft.com/en-us/library/aa337525.aspxです。

これは、データがディスクに書き込まれるタイミングをより具体的にあなたの質問に答えるかもしれません。

3

完全性を維持するために、トランザクションが完了するたびに書き込みを行う必要があります。
COMMITステートメントが実行されると、トランザクションは完了します。
1つのトランザクション内に複数のステートメント(SELECT、INSERT、UPDATE & DELETE)が存在することがあります。
オープン時とクローズ時のみの書き込みは、ACIDトランザクションの適切なサポートを提供しません。

多くのデータベースでは、トランザクションの記録目的で独立した内部ログが保持されています。ログへの書き込みは重要な操作で、ログはクラッシュリカバリ状況でデータベースを再構築するために使用できます。

一部のデータベース実装では、ログがディスクに正常に書き込まれている限り、実際のエンティティデータを後でディスクに保存することを選択することがあります。
メモリ内のバッファから同じデータを後で読み取ることができます。エンティティデータがディスクに書き込まれる前にクラッシュが発生した場合、次回の起動時にログから変更を適用して、内部一貫性

+0

+1 - トランザクションデータベースのログの重要性を示すため。 –

関連する問題