数据库与文件系统存储

Database vs File system storage

数据库最终将数据存储在文件中,而文件系统也将数据存储在文件中。在这种情况下,数据库和文件系统之间有什么区别。是检索方式还是其他原因?

A database is generally used for storing related, structured data, with well defined data formats, in an efficient manner for insert, update and/or retrieval (depending on application).

On the other hand, a file system is a more unstructured data store for storing arbitrary, probably unrelated data. The file system is more general, and databases are built on top of the general data storage services provided by file systems. [Quora]

如果您要查找特定文件,文件系统很有用,因为操作系统维护着一种索引。但是,txt 文件的内容不会被索引,这是数据库的主要优点之一。

对于非常复杂的操作,文件系统可能会非常慢。

RDBMS 的主要优点:

  • 表相互关联

  • SQLquery/data处理语言

  • SQL(Transact-SQL)

    的交易处理补充
  • 使用存储过程、函数、触发器、视图等服务器端对象的服务器-客户端实现

文件系统相对于数据库管理系统的优势是:

在处理包含任意的、可能不相关的数据的小型数据集时,文件比数据库更有效。 对于简单的操作,读、写、文件操作更快更简单。

您可以在互联网上找到 n 个差异。

需要注意的是 Unix 有一个 inode 限制。如果您要存储数百万条记录,那么这可能是一个严重的问题。您应该 运行 df -i 查看有效使用的 % 这是文件系统文件限制 - 即使您有足够的磁盘 space.

文件处理系统和数据库管理系统的区别如下:

  1. 文件处理系统是在计算机硬盘中存储和管理文件的程序集合。另一方面,数据库管理系统是能够创建和维护数据库的程序集合。

  2. 文件处理系统有更多的数据冗余,dbms 中的数据冗余更少。

  3. 文件处理系统在访问数据方面提供的灵活性较低,而 dbms 在访问数据方面具有更大的灵活性。
  4. 文件处理系统不提供数据一致性,而dbms通过规范化提供数据一致性。
  5. 文件处理系统不那么复杂,而 dbms 更复杂。

上下文:我编写的文件系统已经 运行 投入生产 7 年了。 [1]

文件系统和数据库之间的主要区别在于文件系统 API 是 OS 的一部分,因此文件系统实现必须实现 API因此遵循一定的规则,而数据库是由具有完全自由的第三方建立的。

从历史上看,当 OS 提供的文件系统不足以解决手头的问题时创建的数据库。试想一下:如果您有特殊要求,您不能只打电话给 Microsoft 或 Apple 来重新设计他们的文件系统 API。您要么继续编写自己的存储软件,要么四处寻找现有的替代方案。因此,这种需求为第 3 方数据存储软件创造了市场,最终被称为 databases。就这些了。

虽然文件系统似乎有一定的规则,比如拥有文件和目录,但事实并非如此。最大的操作系统都是这样工作的,但也有许多小型 OS 的工作方式不同。这当然不是一个硬性要求。 (请记住,要构建一个新的文件系统,您还需要编写一个新的 OS,这将使采用变得相当困难。为什么不只关注存储引擎并将其称为数据库呢?)

最后,数据库和文件系统都有各种形状和大小。交易的、关系的、分层的、图形的、表格的;只要你能想到的。

[1] 我曾研究过 Boomla 文件系统,它是 Boomla OS 和 Web 应用程序平台背后的存储系统。

数据库和文件系统存储之间的主要区别是:

  1. The database is a software application used to insert, update and delete data while the file system is a software used to add, update and delete files.
  2. Saving the files and retrieving is simpler in file system while SQL needs to be learn to perform any query on the database to get (SELECT), add (INSERT) and update the data.
  3. Database provides a proper data recovery process while file system did not.
  4. In terms of security the database is more secure then the file system (usually).
  5. The migration process is very easy in File system just copy and paste into the target while for database this task is not as simple.

“它们是一样的”

是的,存储数据就是存储数据。在一天结束时,您有文件。你可以在很多文件和文件夹中存储很多东西,在某些情况下就是这样。有一个著名的版本控制解决方案 (svn) 最终使用基于文件系统的模型来存储数据,放弃了他们的 BerkeleyDB。罕见但发生了。 More info.

“他们完全不同”

在数据库中,您拥有文件所没有的选项。想象一个包含 99999 行的文本文件(类似于 tsv/csv)。现在尝试:

  • 插入一列。这很痛苦,你必须改变每一行并读取+写入整个文件。
  • 找一行。要么扫描整个文件,要么自己建立索引。
  • 删除一行。查找行,然后读取+写入其后的所有内容。
  • 重新排序列。同样,完全读+写。
  • 对行进行排序。完整阅读,进行某种排序 - 然后下次再做一遍。

还有很多其他优点,但当您想到基于文件的数据库替代方案时,这些是您要尝试攀登的第一座山。那些家伙为你编写了所有这些,你可以使用;想想可能的(最常见的)场景,列举你想对你的数据执行的所有可能的操作,然后决定哪一个更适合你。 考虑利益,而不是时尚。

同样,如果您正在存储 JPG 图片并且只通过一个键查找它们(可能是它们的 ID?),那么经过深思熟虑的文件系统存储会更好。文件系统,顺便说一句,今天很接近数据库,因为它们中的许多使用平衡树方法,所以在 BTRFS 上你可以将所有图片放在一个文件夹中 - OS 将默默地实现类似早期 SQL每次访问文件时查询。

那么,数据库还是文件?...
让我们看几个典型的例子,当一个比另一个更好时。 (这些不是完整的列表,当然你可以在两边填入更多内容。)

DB 表在以下情况下更好:

  • 您想存储许多具有完全相同结构的行(没有块浪费)
  • 您需要按多个值快速查找/排序(索引表)
  • 你需要原子事务(数据安全)
  • 您的用户将一直read/write相同的数据(更好的锁定)

如果满足以下条件,文件系统会更好:

  • 您喜欢对数据使用版本控制(dbs 的噩梦)
  • 您有大量频繁增长的数据(通常是日志文件)
  • 您希望其他应用无需 API (例如文本编辑器)即可访问您的数据
  • 您想存储大量二进制内容(图片或 mp3)

TL;DR

编程很少说“从不”或“总是”。那些说 “数据库总是赢”“文件总是赢” 的人可能只是不够了解。想想可能的行动(现在+未来),考虑两种方式,并为案例选择最快/最有效的。就是这样。