数据库最终将数据存储在文件中,而文件系统也将数据存储在文件中。在这种情况下,数据库和文件系统有什么区别。是检索方式还是其他方式?
6 回答
数据库通常用于存储相关的结构化数据,具有明确定义的数据格式,以用于插入、更新和/或检索的有效方式(取决于应用程序)。
另一方面,文件系统是一种更加非结构化的数据存储,用于存储任意、可能不相关的数据。文件系统更通用,数据库建立在文件系统提供的通用数据存储服务之上。[知乎]
如果您正在查找特定文件,则文件系统很有用,因为操作系统维护一种索引。但是,txt 文件的内容不会被索引,这是数据库的主要优点之一。
对于非常复杂的操作,文件系统可能会非常慢。
RDBMS 的主要优点:
表是相互关联的
SQL查询/数据处理语言
SQL 之外的事务处理 (Transact-SQL)
使用服务器端对象(如存储过程、函数、触发器、视图等)的服务器-客户端实现。
文件系统相对于数据库管理系统的优势在于:
在处理带有任意、可能不相关的数据的小型数据集时,文件比数据库更有效。对于简单的操作,读、写、文件操作更快更简单。
您可以在互联网上找到 n 个差异。
应该注意的是 Unix 具有所谓的 inode 限制。如果您要存储数百万条记录,那么这可能是一个严重的问题。您应该运行df -i
以查看有效使用的 % 这是一个文件系统文件限制 - 即使您有足够的磁盘空间。
“他们是一样的”
是的,存储数据只是存储数据。在一天结束时,您有文件。您可以将大量内容存储在大量文件和文件夹中,但这种方式存在问题。有一个著名的版本控制解决方案 (svn) 最终使用基于文件系统的模型来存储数据,放弃了他们的 BerkeleyDB。罕见但发生。更多信息。
“他们完全不同”
在数据库中,您有文件没有的选项。想象一个有 99999 行的文本文件(类似于 tsv/csv)。现在尝试:
- 插入一列。这很痛苦,您必须更改每一行并读取+写入整个文件。
- 找一排。您要么扫描整个文件,要么自己建立索引。
- 删除一行。找到行,然后读+写它之后的所有内容。
- 重新排序列。再次,完全读+写。
- 对行进行排序。完整阅读,某种排序 - 然后下次再做一遍。
还有很多其他优点,但是当您想到基于文件的数据库替代方案时,这些是您尝试攀登的第一座山。那些家伙为你编写了这一切,你可以使用它;考虑可能的(最常见的)场景,列举你想对数据执行的所有可能的操作,并决定哪一个更适合你。考虑利益,而不是时尚。
同样,如果您要存储 JPG 图片并且只通过一个键(可能是它们的 id?)来查找它们,那么经过深思熟虑的文件系统存储会更好。顺便说一句,文件系统如今已接近数据库,因为它们中的许多都使用平衡树方法,因此在 BTRFS 上,您可以将所有图片放在一个文件夹中 - 每次您使用时,操作系统都会默默地实现类似于早期 SQL 查询的东西访问您的文件。
TL;博士
编程很少说“从不”或“总是”。那些说“数据库总是赢”或“文件总是赢”的人可能只是不够了解。考虑可能的行动(现在+未来),考虑两种方式,并为案例选择最快/最有效的。而已。
文件处理系统和数据库管理系统的区别如下:
文件处理系统是在计算机硬盘中存储和管理文件的程序的集合。另一方面,数据库管理系统是能够创建和维护数据库的程序的集合。
文件处理系统数据冗余多,dbms数据冗余少。
- 文件处理系统在访问数据方面提供的灵活性较低,而 dbms 在访问数据方面具有更大的灵活性。
- 文件处理系统不提供数据一致性,而 dbms 通过规范化提供数据一致性。
- 文件处理系统不太复杂,而 dbms 更复杂。
上下文:我编写了一个已经在生产环境中运行了 7 年的文件系统。[1]
文件系统和数据库之间的主要区别在于文件系统 API 是操作系统的一部分,因此文件系统实现必须实现该 API 并因此遵循某些规则,而数据库是由具有完全自由的第 3 方构建的。
从历史上看,当操作系统提供的文件系统不足以解决手头的问题时创建的数据库。想想看:如果你有特殊要求,你不能只打电话给微软或苹果重新设计他们的文件系统 API。您要么继续编写自己的存储软件,要么四处寻找现有的替代方案。因此,需要为最终被称为数据库的 3rd 方数据存储软件创造了一个市场。就是这样。
虽然文件系统似乎具有某些规则,例如拥有文件和目录,但事实并非如此。最大的操作系统就是这样工作的,但有许多商场小型操作系统的工作方式不同。这当然不是硬性要求。(请记住,要构建一个新的文件系统,您还需要编写一个新的操作系统,这将使采用变得相当困难。为什么不只关注存储引擎并将其称为数据库呢?)
最后,数据库和文件系统都有各种形式和大小。事务的、关系的、分层的、图形的、表格的;无论你能想到什么。
[1] 我曾研究过 Boomla 文件系统,它是Boomla操作系统和 Web 应用程序平台背后的存储系统。
数据库和文件系统存储之间的主要区别是:
- 数据库是用于插入、更新和删除数据的软件应用程序,而文件系统是用于添加、更新和删除文件的软件。
- 在文件系统中保存文件和检索文件更简单,而需要学习 SQL 对数据库执行任何查询以获取(SELECT)、添加(INSERT)和更新数据。
- 数据库提供了适当的数据恢复过程,而文件系统没有。
- 在安全性方面,数据库比文件系统(通常)更安全。
- 文件系统中的迁移过程非常简单,只需复制并粘贴到目标中即可,而对于数据库,此任务并不简单。