数据库与文件系统存储的区别

139

数据库最终将数据存储在文件中,而文件系统也将数据存储在文件中。在这种情况下,DB和文件系统的区别是什么?它在检索方式上不同还是其他方面有差别?


1
相关内容:https://dba.stackexchange.com/q/2445,https://dev59.com/S3RB5IYBdhLWcg3wUFvB,https://dev59.com/iHRA5IYBdhLWcg3wzhbZ - djvg
6个回答

92

数据库通常用于存储相关结构化数据,具有定义良好的数据格式,以有效的方式进行插入、更新和/或检索(取决于应用程序)。

另一方面,文件系统是一种更无结构的数据存储,用于存储任意的、可能无关的数据。文件系统更为通用,而数据库建立在文件系统提供的通用数据存储服务之上。[Quora]

如果您正在寻找特定文件,则文件系统非常有用,因为操作系统维护一种索引。但是,txt文件的内容不会被索引,这是数据库的主要优势之一。

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

关系型数据库管理系统(RDBMS)的主要优势:

  • 表彼此相关联

  • SQL查询/数据处理语言

  • 除了 SQL(Transact-SQL)外,还有事务处理

  • 服务器 - 客户端实现,带有服务器端对象,如存储过程、函数、触发器、视图等等

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

当处理任意的、可能无关的小数据集时,文件比数据库更有效率。对于简单的操作,读写和文件操作更快且更简单。

您可以在互联网上找到无数的差异。


数据库和文件系统之间唯一的区别在于数据存储的方式和结构。但是两个系统都可以存储数据,对吧? - Sriram
是的,但结构化或非结构化数据是问题。 - Vicky
50
文件系统和数据库的区别在于它们的目的和设计。文件系统旨在存储和管理计算机文件,包括文档、图片、音频和视频等。而数据库则是为了高效地组织和访问数据而设计的。数据库通常具有更复杂的结构和查询功能,可以支持更高级别的数据操作和分析。 - PoweredByRice

38

"它们是一样的"

是的,存储数据就是储存数据。最终你会得到文件。你可以在许多文件和文件夹中储存大量的东西,有时这是唯一的方法。有一个广为人知的版本控制解决方案(svn),最终采用基于文件系统的模型来存储数据,放弃了他们的BerkeleyDB。虽然很少见,但确实会发生。 更多信息

"它们是相当不同的"

在数据库中,你有一些文件不具备的选项。想象一下有99999行的文本文件(类似tsv / csv)。现在尝试:

  • 插入列。 这很麻烦,你必须更改每一行并读取+写入整个文件。
  • 查找行。 你要么扫描整个文件,要么自己建立索引。
  • 删除行。 找到行,然后读取并写入它之后的所有内容。
  • 重新排序列。 同样需要完全读取+写入。
  • 排序行。 完全读取,某种类型的排序 - 然后下次再做一遍。
  • 你需要轻松地存储和读取各种文件类型 (不仅仅是结构化数据)
  • 你只需要通过一个键值查找文件 (比如ID)
  • 你需要快速的、简单的解决方案 (比如为小型项目)
  • 你希望利用现有的文件系统功能 (例如权限控制和备份)
  • 当然,这里列出的只是一些典型的例子,实际上还有很多其他因素需要考虑。在做出决策之前,请确保了解你的需求和目标,并选择最适合你的工具。

  • 你希望在数据上使用版本控制 (对于数据库来说是一场噩梦)
  • 你有大量的数据块,且这些数据经常增长 (通常为日志文件)
  • 你希望其他应用程序可以访问你的数据而无需API (如文本编辑器)
  • 你想要存储大量的二进制内容 (例如图片或mp3文件)

  • 简洁摘要

    编程很少会说“永远不”或“总是”。那些说“数据库总是赢”或“文件总是赢”的人可能只是不够了解。考虑现在和未来的可能操作,同时考虑两种方式,并选择最快/最有效的方法适用于当前情况。就是这样。


    1
    这个答案似乎最好地解决了两者的实际使用。也许可以添加一个部分来涵盖数据库在磁盘上存储信息的方式与文件存储数据的方式之间的区别。我的意思是要澄清一个数据库不仅仅是一个大文件中的一堆行,这似乎是问题所暗示的部分。 - Max Power
    1
    @MaxPower 你说得十分正确,但这涉及到很多书籍。我相信即使在StackOverflow上也有不止一篇文章解释平衡树和索引算法。我们方便地使用简化的接口,实际上是IT重科学的体现。我只认识少数几个人能够从零开始实现类似数据库的存储,而他们大部分都是50+,这同样适用于SQL本身。(像Elastic这样的系统则大不相同,我不敢对它们发表这样的陈述,但再次强调:这是科学,背后有理论支持。) - dkellner

    24

    需要注意的是,Unix有一个被称为inode限制的东西。如果你要存储数百万条记录,那么这可能会是一个严重的问题。你应该运行df -i来查看使用了多少%,因为这实际上是一个文件系统文件限制,即使你有足够的磁盘空间。


    但是你可以在一个文件中以JSON格式存储许多“记录”。您不需要将一个文件视为一个记录。这个文件可以是一个DB“表”。难道不是吗? - atom
    问题在于单个文件会变得非常大,需要在内存中读取。我不知道数据库系统如何处理这个问题,但我认为文件大小将成为您需要解决的问题。 - Antony

    10

    上下文: 我编写了一个文件系统,它已经在生产环境中运行了7年。

    文件系统和数据库之间的关键区别在于,文件系统API是操作系统的一部分,因此文件系统实现必须实现该API并遵循某些规则,而数据库是由第三方构建,具有完全自由。

    从历史上看,当操作系统提供的文件系统不足以解决问题时,就会创建数据库。想想看:如果您有特殊要求,您不能只打电话给Microsoft或Apple来重新设计他们的文件系统API。你要么继续编写自己的存储软件,要么寻找现有的替代品。所以需求创造了一个第三方数据存储软件市场,最终被称为数据库。就是这样。

    尽管似乎文件系统有一些规则,例如拥有文件和目录,但这并不是真的。最大的操作系统是这样工作的,但有许多小型操作系统工作方式不同。这肯定不是硬性要求。(请记住,要构建新的文件系统,您还需要编写新的操作系统,这将使采用变得更加困难。为什么不专注于存储引擎并将其称为数据库呢?)

    最终,数据库和文件系统都有各种形状和大小。事务、关系、分层、图形、表格等等。

    [1] 我曾经在Boomla文件系统上工作过,它是Boomla操作系统和Web应用程序平台背后的存储系统。


    第三方数据库(例如将数据存储在文件中的PostgreSQL)仍然需要使用系统调用与文件系统进行交互,对吗?或者这些数据库会直接访问磁盘,绕过文件系统吗? - ns15
    1
    通常情况下,一旦分区被挂载或者进行原始I/O操作,该磁盘部分的所有权就归操作系统所有,其他任何东西都必须使用操作系统呈现的文件系统(否则可能会导致文件系统损坏)。尽管如此,数据库可以按照自己的喜好在文件系统上表示其数据,并使用任意数量的文件。系统调用通常涉及打开/读取/写入/关闭/内存映射等给定文件;数据库程序可以对该操作集合进行任何操作。 - Zoë Sparks

    10
    文件处理系统和数据库管理系统的区别如下:
    1. 文件处理系统是一组程序,用于存储和管理计算机硬盘中的文件。另一方面,数据库管理系统是一组程序,可创建和维护数据库。
    2. 文件处理系统具有更多的数据冗余性,而dbms中的数据冗余性较少。
    3. 文件处理系统在访问数据时提供的灵活度较小,而dbms在访问数据时具有更高的灵活度。
    4. 文件处理系统不提供数据一致性,而dbms通过规范化提供数据一致性。
    5. 文件处理系统较简单,而dbms较复杂。

    1
    我认为问题是关于数据库而不是数据库管理系统。 - Divyanshu Juneja

    2

    数据库和文件系统存储的主要区别在于:

    1. 数据库是用于插入、更新和删除数据的软件应用程序,而文件系统是用于添加、更新和删除文件的软件。
    2. 在文件系统中,保存和检索文件更简单,而在数据库中需要学习SQL才能执行任何查询以获取(SELECT)、添加(INSERT)和更新数据。
    3. 数据库提供了适当的数据恢复过程,而文件系统没有。
    4. 就安全性而言,数据库比文件系统更安全(通常情况下)。
    5. 在文件系统中,迁移过程非常容易,只需将文件复制并粘贴到目标位置,而对于数据库来说,这个任务并不简单。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接