プレーンテキストファイルですか、バイナリファイルですか、それとも文字ファイルですか?フラットファイルが実際に何を意味するのかを説明できる人はいますか?
ベストアンサー1
dirktが文脈を尋ねるのは正しいですが、フラットファイルがデータベースではないか、レコードが含まれていると言うのは非常に間違っています。
フラットファイルデータベース
データベースの文脈では、フラットファイルデータベース次の条件:
- ファイルに1つのテーブルのみを含むデータベース。
- このテーブルにはインデックスがありません。
- 構造はリレーショナル、階層型、ネットワーク型ではありません。
- ファイルには、フィールドが列位置として表示される固定長レコード、またはレコードとフィールドが区切り文字で区切られた可変長レコードを含めることができます。
この問題を議論するとき、文献に登場する基本順次アクセス方式(BSAM)とキュー順次アクセス方式(QSAM)という用語に触れることができます。これは、人々がフラットファイルデータベースにアクセスする方法に関連しています。この概念では、レコードをソートしたりキーを入力したりする必要がないため、線形で順次読み書きする必要があります。
挿入と削除には完全なファイル処理が含まれます。テープなどのシーケンシャルアクセスを容易にするメディアに保存されているフラットファイルデータベースとデータベースの更新は、時々入力テープAとBから読み取られ、出力テープCにマージされるようになりました。 (例:Aは今日開始するマスターファイル、Bは今日のトランザクション、Cは明日実行されるマスターファイルです。)
日常的なフラットファイルデータベース
これは再び起こらないと思うかもしれませんし、少なくともUnixとLinuxでは起こらないと思うかもしれません。あなたも間違っています。以下は、利用可能ないくつかのフラットファイルデータベースです。毎日:
- Linuxのユーザーアカウントデータベースはフラットファイルの集まりです。
- バージョン7
/etc/passwd
ファイルは、可変長レコード、フィールド区切り文字としてコロン文字、レコード区切り文字で改行文字を含む単一の表です。 /etc/group
、、/etc/shadow
にも同様です/etc/gshadow
。
- バージョン7
- ファイル
/etc/fstab
は、可変長レコード、フィールド区切り文字で改行ではなく空白文字、レコード区切り文字で改行文字を含む単一の表です。ファイルシステムテーブル- 名前にぴったりです。/etc/services
、、、、、、および同様です。/etc/crontab
/etc/phones
/etc/ttys
/etc/hosts
/etc/protocols
- ログインデータベース(Linux
/run/utmp
;、、FreeBSDなど)は、固定長レコードがあり、フィールドまたはレコード区切り文字がなく、フィールドが列位置として表示されるフラットファイルデータベースです。/var/log/wtmp
/run/utx.active
/var/log/utx.lastlogin
/var/log/utx.log
上記の可変長レコードデータベースでレコードの挿入および削除を実行するためにファイル全体を読み取ってから、ファイル全体を再作成しないと考えることもできます。カーソルを移動し、行の削除と挿入を実行します。しかし、あなたはテキストエディタが提供するファイルI / O全体を無視しています。それ自体実際にそうしたときファイルのロードと保存。ファイル自体に対する実際のアプローチは、フラットファイルデータベース方式です。
フラットファイルではなく、日常的なデータベース
このようなフラットファイルデータベースは、シーケンシャルアクセス以外のものを望む場合にパフォーマンスが低下するフラットファイルデータベースの例である。ホスト/etc/hosts
またはユーザーアカウントの検索には、/etc/passwd
ファイルを順番に読み取る操作が含まれます。インデックスはなく、アイテムは検索に使用されたキーの順序で並べ替えられません。これらのフラットファイルデータベース(たとえばgethostent()
、、、、、getpwent()
などgetfsent()
)getgrent()
をgetutxent()
取得するためのCライブラリルーチンを見ると、後で処理される例外を除いて順次アクセス方法が表示されます。 (さまざまなgetXbyY()
ルーチンがこれらのルーチンの上に構築されています。一致するものが見つかるまで順次アクセスルーチンを呼び出すだけです。)
したがって、BSDでは、実際のユーザーアカウントデータベースは次のようになります。いいえフラットファイルデータベース。 UIDとユーザー名で索引付けされたBerkeley DBファイル。 .NETファイル/etc/master.passwd
に保存されているフラットファイルデータベースのプログラムによってコンパイルされますpwd_mkdb
。 Cライブラリは実際に/etc/pwd.db
または(可能な場合)を読み込みます/etc/spwd.db
。
BSD「機能データベース」ソースファイル構造(たとえば/etc/gettytab
、、、、/etc/login.conf
および/etc/termcap
)は真のフラットファイルではありません。 (/etc/login.conf.db
コンパイルされたファイル構造は/etc/termcap.db
およびにありますが、決してそうではありません。)レコードには参照として他のレコードを含めることができ、特定のレコードのすべてのフィールドを見つけるために従う必要があるチェーンを形成します。実際、コンパイラはcap_mkdb
まさにそのようなことをします。
フラットファイルは「ASCIIテキスト」ではありません。
ASCIIは、ファイル、グループ、レコード、および単位(フィールドなど)区切り文字の特定の制御文字を定義します。 UnicesとLinuxでは主に使用されず、代わりにスペースTAB
、LF
コロンなどの文字を使用します。
人々は時々「フラットファイルデータベースには単純なASCIIテキストが含まれています」と言います。上記の例のいくつかを見ると、これは事実ではないことは明らかです。これは、特定の一般的なタイプの可変長レコードフラットファイルデータベースの場合にのみ当てはまります。しかし、UnixやLinuxシステムでも広く使われているログインデータベースもフラットファイルデータベースですが、その中のさまざまなフィールドは確かにフラットファイルデータベースです。いいえASCII文字エンコーディングとして解釈されます。
(より広い世界を見てUnix / Linuxトンネルビジョンを超えて見ると、これはdbf
xBaseがASCIIでエンコードされたフィールドの内容をファイルに保存するという事実から生じる誤解です。人々はxBaseについて話していました。世界で最も人気のあるものです。データベースシステムは「フラットファイル」システムですが、実際には「リレーショナル」または「オブジェクト指向」という用語を使用しており、人々が「レガシー」を誤用したのと同じ方法で「古い」システムです。使用していますが、 dbf
ファイルには実際に多くのコンテンツがあります。いいえASCII文字エンコーディングとして解釈されます。 )
追加読書
- Burleson、ドナルドK.(1998)。データベースオブジェクトモデルの内部。 CRCプレス。 ISBN 9780849318078.
- マティソン、ロブ(1998)。データベース管理システムについて学ぶ。マクグロヒル。 ISBN 9780070499997.