Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为什么不';操作系统(Windows、Linux)使用关系数据库(RDBMS)而不是文件系统?_Database_Operating System_Filesystems_Rdbms - Fatal编程技术网

Database 为什么不';操作系统(Windows、Linux)使用关系数据库(RDBMS)而不是文件系统?

Database 为什么不';操作系统(Windows、Linux)使用关系数据库(RDBMS)而不是文件系统?,database,operating-system,filesystems,rdbms,Database,Operating System,Filesystems,Rdbms,我们都知道,大多数操作系统都使用文件系统来存储所有数据,但您不认为在网站/web应用程序中使用数据库更有效吗;博士:多样性 首先,如果您查看原始FAT文件系统和原始Unix文件系统,它们都是键值存储,没有目录层次结构 其次,建议存在使用RDBMS后端实现的文件系统,这与您的问题无关 说到这里,将RDBMS与作为操作系统存储的文件系统相比较,使用RDBMS有几个缺点: 首先,RDBMS以性能为代价,通过锁定的方式提供非常强大的保证(ACID)。然而,大多数程序不需要这样的保证(例如,想想每一个使

我们都知道,大多数操作系统都使用文件系统来存储所有数据,但您不认为在网站/web应用程序中使用数据库更有效吗;博士:多样性


首先,如果您查看原始FAT文件系统和原始Unix文件系统,它们都是键值存储,没有目录层次结构

其次,建议存在使用RDBMS后端实现的文件系统,这与您的问题无关

说到这里,将RDBMS与作为操作系统存储的文件系统相比较,使用RDBMS有几个缺点:

首先,RDBMS以性能为代价,通过锁定的方式提供非常强大的保证(ACID)。然而,大多数程序不需要这样的保证(例如,想想每一个使用NoSQL DB的程序)。相比之下,POSIX对元数据有很强的保证,但对I/O几乎没有任何保证。您可以在POSIX之上构建RDBMS并添加锁定,但不能在RDBMS之上构建文件系统并移除锁定

其次,RDBMS需要一个模式。假设您为操作系统创建了一个新的存储卷。您需要决定模式,而不是格式化文件系统。哪种模式最有用

对于文件系统,“模式”基本上是一个表,包含“路径”、“数据”列,以及每个文件属性(如修改时间、类型和大小)的一列。使用此模式的RDBMS允许您以原子方式执行诸如大规模截断、大规模重命名、大规模访问控制等操作。但是,它不允许您同时修改同一记录(文件)的数据。它也不允许您实现硬链接。扩展属性或备用数据流仍必须像今天一样实现,而不是利用RDBMS功能以及路径列的特殊索引逻辑来实现更改目录、列出目录、检查文件路径中每个目录的权限等功能。,以及数据列的特殊逻辑,因为文件的大小可以是TBs。在这一点上,您添加的功能越多,RDBMS的ROI就越低

或者,您可以让模式针对每个程序(即每个程序都可以执行
CREATE TABLE
等),但您的功能又受到RDBMS功能的限制。例如,如何获得
find/-size+1GB
md5sum
,甚至
cat
ls
?这些程序将读取哪些列?您会发现所有通用程序现在都需要获取一组感兴趣的列。这也使得编写脚本变得更加困难

第三,层次系统通常更易于扩展

一个例子是当您想要添加存储时。在分层文件系统中,即使没有任何奇特的文件系统特性,您也可以简单地将另一个文件系统装载到一个目录上,这样您就有了新的存储。与增加当前文件系统的存储容量相比,硬链接和重命名不能跨文件系统工作,并且不能共享存储容量。但是,在RDBMS上,您可以选择创建一个新表并让您的程序/脚本管理这两个表,或者添加更多存储卷,为此您可能需要执行更高级的操作,如分区

另一个例子是生态系统需求。作为一个最终用户,想要在他们的60000张图片、5000首歌曲、数百份工作电子表格、10000个Meme、数百本电子书、视频等中下一些订单-这些东西可以方便地按层次排列-您目前只需要两个程序-一个文件管理器(Explorer、bash、Nautilus等)和一个搜索功能(例如
find(1)
)。在RDBMS上,您可以使用具有不同列的不同表,也可以使用具有通用列的一个表。无论哪种方式,都必须有一组SQL脚本来处理这些特定集合,这相当于为每种类型的集合都有一个shell脚本或一个程序。也就是说,管理大型集合需要更多的编程

由于分层系统在一般环境中(主要操作系统操作的环境)很有用,而且在分层系统之上构建非分层系统比在其他环境中构建更容易(分层文件系统缓存甚至使操作更容易),操作系统支持一流的分层系统是很有价值的


执行摘要是:操作系统服务于许多用例,而存储访问是其中的一个主要部分。对于操作系统来说,构建一个尽可能小的存储访问机制是明智的,但它允许应用程序在操作系统之上构建更专门的存储访问机制

这意味着提供一组小但有用的功能(如权限、锁定、装载和符号链接),但不强制要求太多(如锁定或为操作系统指定数据格式)

RDBMS太具体了