dirkt 询问上下文是正确的,但对于不是数据库或包含记录的平面文件是非常错误的。
在数据库上下文中,平面文件数据库满足以下条件:
在讨论这个问题时,人们可能会遇到诸如基本顺序访问方法 (BSAM) 和排队顺序访问方法 (QSAM) 之类的术语。这与访问平面文件数据库的方式有关。人们必须线性和顺序地读取和写入它们,因为该概念不需要对记录进行排序甚至键控。
插入和删除涉及处理整个文件。平面文件数据库过去通常存储在适合顺序访问的介质上,例如磁带,并且数据库更新有时会采用从输入磁带 A 和 B 中读取并合并到输出磁带 C 的形式。(例如:A可能是今天开始的主文件,B 可能是今天的交易,而 C 可能是明天运行的主文件。)
你可能会认为你不会再遇到这样的事情,或者至少你不会在 Unix 和 Linux 上遇到它们。你也大错特错。以下是您每天都会遇到的一些平面文件数据库:
/etc/passwd文件是一个单表,具有可变长度的记录,冒号字符作为字段分隔符,换行符作为记录分隔符。/etc/group,/etc/shadow和/etc/gshadow。/etc/fstab文件是一个单表,具有可变长度的记录,非换行空白字符作为字段分隔符,换行作为记录分隔符。文件系统表- 它在名称中。
/etc/services,/etc/crontab,/etc/phones,/etc/ttys,/etc/hosts,和/etc/protocols。/run/utmp和/var/log/wtmpLinux上; /run/utx.active,/var/log/utx.lastlogin,和/var/log/utx.log。在FreeBSD等人)是具有固定长度的记录,没有场也不记录分隔符和字段通过柱位置表示平面文件数据库。您可能认为您不会读入整个文件,然后将整个文件重新写回,以便在上述可变长度记录数据库中执行记录的插入和删除。您移动光标并执行行删除和插入操作。但是您忽略了整个文件 I/O 正是您的文本编辑器本身在加载和保存文件时实际执行的操作。文件本身的实际访问方法是平面文件数据库。
当人们想要顺序访问以外的其他东西时,这些平面文件数据库就是平面文件数据库性能不佳的例子。在 中查找主机/etc/hosts或在 中查找用户帐户/etc/passwd涉及顺序读取文件。没有索引,条目也没有按照用于搜索的键的顺序排序。看看用来搜索这些平面文件数据库的C库函数(如gethostent(),getpwent(),getfsent(),getgrent(),和getutxent()),并与一个例外,我们会得到在短短的一瞬间,你会看到顺序访问方法。(各种getXbyY()例程建立在这些之上。它们只是调用顺序访问例程,直到找到匹配项,您就会找到。)
因此,在 BSD 上,实际的用户帐户数据库不是平面文件数据库。它们是 Berkeley DB 文件,按 UID 和用户名进行索引。它们是由程序从存储在 中的平面文件数据库编译/etc/master.passwd的pwd_mkdb。C 库实际上读取/etc/pwd.dbor (如果可以的话)/etc/spwd.db。
BSD的“性能数据库”源文件结构,你会在这样的人找到/etc/gettytab,/etc/login.conf和/etc/termcap,是不是一个真正的平面文件。(在/etc/login.conf.db和 中找到的编译文件结构,/etc/termcap.db绝对不是。)记录可以通过引用包含其他记录,形成必须遵循的链,以便找到给定记录的所有字段。事实上,编译器 ,cap_mkdb就是这样做的。
ASCII 为文件、组、记录和单元(即字段)分隔符定义了特定的控制字符。它们主要在 Unices 和 Linux 上未使用,有利于像空格TAB、LF、 和冒号这样的字符。
人们有时会说“平面文件数据库包含简单的 ASCII 文本”。从上面给出的一些例子应该可以清楚地看出,事实并非如此。这仅适用于一种特定的常见类型的可变长度记录平面文件数据库。然而,在您的 Unix 或 Linux 系统上同样广泛使用的登录数据库也是一个平面文件数据库,但其中各种字段绝对不会被解释为 ASCII 字符编码。
(从更广阔的世界来看,当人们抛弃 Unix/Linux 隧道愿景时:这是一种误解,因为 xBase 将用 ASCII 编码的字段内容存储在dbf文件中的事实有所帮助。人们过去常常谈论 xBase,曾经被吹捧为世界上最流行的数据库系统,作为“平面文件”系统,尽管他们实际上使用该术语与“关系”或“面向对象”相对立,并以人们滥用“遗留”的方式误用它“旧”。因此“平面文件”系统“使用 ASCII”。但这甚至不是真的。 dbf文件有很多东西,同样,绝对不能解释为 ASCII 字符编码。)
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |