2

私が知る限り、SQL ステートメントを発行すると、データベース (MySQL では確かに) のデフォルトの動作は自動コミットです。
しかし、構造は通常次のようになります。

String sqlInsertOrUpdateStatement = "....";  
sqlStatement.execute(sqlInsertOrUpdateStatement);  
//rest of code  

現在、これexecuteはブロッキング関数であり、返されたときに、データが保存されたかどうかがわかります (実行の結果による)。
しかし、私が理解できないのは次のことです。
すべての DB 実装は、最下位レベルのファイルを使用します。たとえば、INSERT基本的には、ファイルへの書き込み操作を深く掘り下げています。しかし、ファイルに書き込むとき、内容は実際にはすぐにはフラッシュされないと思います。OSが決定すると、それらはフラッシュされます。アプリケーション コード (C ライブラリなど) がフラッシュを発行しても、OS はすぐにデータをフラッシュします。
では、データベースはどのようにして永続性を保証できるのでしょうか。私が見落としている/誤解しているファイルI/OとOSに基本的なものはありますか?

4

2 に答える 2

3

Linux データベースでは、管理システムはfsync呼び出しを使用します。これは実際に次のことを行います: データがdisk に書き込まれることを保証します。Oracle のような大規模なシステムの中には、ファイルシステムをスキップして (OS によって行われるとあなたが言及したことを行う)、ドライブ自体のセクターに書き込む (もちろん速度を向上させる) ものもあります。

そして、耐久性に疑問を持ちたい場合は...ハードドライブも、大量であっても故障する可能性があります;-)

于 2013-11-09T21:35:48.100 に答える