No.4ベストアンサー
- 回答日時:
>かなり低レベルのディスクI/Oを自前で(エンジンが)やるのでしょうか。
なんとなくわかってきました。
fuuten_no_nekoさんの低レベルI/Oといっているところが。
通常は低レベルIOというと、ディスクのセクタ単位のリード、ライトをさします。なので、fuuten_no_nekoさんが思っている低レベルIOは、プログラマーなどから見ればぜんぜん低レベルIOではありません。
本来の意味の低レベルI/Oを直接DBエンジンが行うという例が、Oracleですとrawデバイスになります。
>しかしこれ単位ではDBのI/Oはやっていられないだろう、というのが元質問です。
OSのファイルシステムを介す時点でI/Oはファイル単位です。ファイル単位でオープンしてクローズします。
ただし、
>その中で更新の必要な箇所だけを随時ディスクに書いていく(フラッシュする)ようになっています。
なので、ファイルのどこに書き込むか?というレベルまでをDBエンジンは行っています。通常のファイルアクセスです。
ただし、もちろん効率化は行われてますよ。
たとえば、あるレコードを更新したら、データ量が増えたときなんてのは、そこに無理矢理データを挿入するのではなくDBのファイルの後ろにくっつけます。元のレコードにはくっつけたデータの位置だけを書きこみます。
こうすることで、書き込むデータ量を減らせます。
もし実際にファイルにデータを挿入しるとなると、書き込み位置より後ろのデータをすべてずらすようなIOを行うことになり非常に非効率となります。
同様に、レコードの削除も通常は削除フラグを立てるだけです。
No.3
- 回答日時:
>しかしDBはほとんどリアルタイムで書き込みを行います。
複数ユーザーの間でのデータ整合性を保つために。複数ユーザーの間でというよりは、データベースとしての整合性ですね。整合性が取れないデータベースはDBじゃないですから。
複数のユーザというか複数セッションからの整合性はロックという考え方になります。
>で、このときファイル単位ではやっていられないと。
もしかして、勘違いされているのはデータ1つずつがばらばらのファイルという感覚なんでしょうか?
実際のDBのファイルでは、大きなひとつまたは複数のファイルの中で、どこにどんなデータを書くというのはあらかじめ決められています。その中で更新の必要な箇所だけを随時ディスクに書いていく(フラッシュする)ようになっています。これはOSの機能ですよ。
なので、
>通常のアプリケーション(例えばワード)では終了時または
>ユーザーが指定した時以外(自動バックアップは除く)ディスクI/Oを行いません。
こんなことは行いません。DBではリアルタイムに行われます。
特に、WordやExcelのファイルの保存というのは、新たにファイルを作り直しているようなものです。保存中に一旦一時ファイルが作成されていますよね。
G単位にもなるDBのファイルをこんなやり方で保存してたらやってられません。
この回答への補足
益々噛み合わなくなっているようです。
ファイル
http://yougo.ascii24.com/gh/73/007354.html
「一般的に、記録ディスクに保存されたデータやプログラムの個々のまとまりを「ファイル」という。ファイル名のあとに「.txt」「.exe」「.xls」などといった「拡張子」を付けることでファイルの種類が見分けられる。」
ということで例えばアクセスでいえば xxx.mdb
しかしこれ単位ではDBのI/Oはやっていられないだろう、というのが元質問です。
No.2
- 回答日時:
>しかしデータベースとなればファイル単位ではやっていられないはずで、ここら辺はどのような仕組みになっているのでしょうか?
通常は巨大なファイル単位ですけど。
なぜやっていられないとお考えなのでしょうか?
ただ、そのファイルの内部でDBエンジンがどのように内部的にファイルを使用しているかはディスクI/Oとは別問題です。
ただし、確かにディスクI/Oまで制御するものも存在します。Oracleはrawデバイスを使用して構築可能です。これはディスクI/Oまで制御して高速化を図っていますが、逆にOSによるファイル保護の恩恵が受けられないため信頼性が落ちます。
この回答への補足
どうも議論が噛み合わないようで(^^;
認識に間違いがあればご指摘下さい。
通常のアプリケーション(例えばワード)では終了時またはユーザーが指定した時以外(自動バックアップは除く)ディスクI/Oを行いません。しかしDBはほとんどリアルタイムで書き込みを行います。複数ユーザーの間でのデータ整合性を保つために。
で、このときファイル単位ではやっていられないと。
No.1
- 回答日時:
ファイルシステムを介さないものがあったと
記憶しています。
例えば、UNIXのディスクは/dev/rsd?(BSD系)で直接
アクセスできますが、これをファイルシステムとして
マウントせずにデータベースのストレージとして使っ
たりということです。
したがって、自前でやることになりますが、それでも
OSが介在するので、ヘッドをどこに動かすとかでは
なく、ソフト的にはバイト単位でアクセスできる大
きなファイルという感じに近いでしょう。
Windows系は知りません。どなたかフォローを。
早速のご回答有り難うございます。
想像していたことが的外れではなかったと思っています。
Windows系も基本は同じことかもしれませんが、さらなるレスを期待しています。→皆様へ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux ubuntuで デイスク/deb/loopというドライブが出るがこれは何? 4 2023/06/04 16:52
- ドライブ・ストレージ 外付けHDD にエラーが出て接続できなくなりました。 6 2023/03/24 10:17
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- ドライブ・ストレージ ディスクの管理では、 左側…ディスク1 不明 右側…空白(未割り当てなどの表示すらない) 4 2023/06/11 19:41
- ノートパソコン DVDの再生について 1 2023/01/13 15:36
- 英語 Take の感じはどうですか? 4 2022/11/27 04:06
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作りたいのですが 1 2022/10/24 18:56
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作成するには 2 2022/10/25 21:19
- Google Drive MTSファイルについて 1 2023/05/11 15:28
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DATファイルをEXCELで開きたい
-
エクセルのフィルタ抽出が固まる
-
マスタメンテとは?
-
SQLローダーを使ってExcelのデ...
-
SQLローダーで複数のCSVファイ...
-
Access2002★MDEファイルを修正...
-
EXCEL VBAによるEXCELファイル...
-
ファイルの存在チェック
-
SQL*Loaderのコミットポイント...
-
ACCESSで名前を付けて保存は・・
-
accessの処理が遅い
-
ACCESS2003での150人同時利用
-
ポストグレにあるExcelファイル...
-
■access2003 で db1 というファ...
-
大量データから抽出する効率よ...
-
postgresql についてです
-
復旧中のデータベースについて
-
【DB】同じトランザクション内...
-
警察はスマホに保存した動画や...
-
復元に異常に時間がかかる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DATファイルをEXCELで開きたい
-
エクセルのフィルタ抽出が固まる
-
SQL*Loaderのコミットポイント...
-
accessの処理が遅い
-
DAOファイルのSQLクエリの部分...
-
ファイルの存在チェック
-
SQLローダーで複数のCSVファイ...
-
マスタメンテとは?
-
ACCESSで名前を付けて保存は・・
-
ファイルメーカーで画像を参照...
-
VSAM,QSAM,BSAM,BPAM,BDAM
-
ポストグレにあるExcelファイル...
-
ファイルメーカーで変更禁止を...
-
SQLローダーを使ってExcelのデ...
-
ACCESS2003での150人同時利用
-
テキストで空欄(null?)を検索...
-
.sdfファイル自体の作成方法
-
videopad 無料版 アンインストール
-
Access2002★MDEファイルを修正...
-
AS400 印刷用ファイルからCS...
おすすめ情報