数据库如何在文件系统上物理存储数据?

33

我需要了解数据库中的数据如何存储在文件系统中。我确信,不同的数据库使用不同的数据存储方式,但我想知道通用规则(如果有的话),以及特定数据库的设置可以做哪些更改。

  1. 整个数据库是如何存储的?一个大文件还是每个表一个文件?
  2. 如果表格非常庞大会怎样?会被分成几个文件吗?
  3. 在这种情况下,文件的典型大小是多少?
1个回答

17
这个问题的答案既与数据库相关,与实现相关。以下是一些数据存储方式的示例:
  • 作为每个数据库的单个文件。(这是 SQL Server 的默认设置。)
  • 使用独立的文件系统管理器,可以是操作系统。(MySQL 有几个选项,例如 InnoDB。)
  • 对于每个表使用单独的文件。(如果我们将 Access 视为数据库。)
  • 作为多个物理文件,分布在多个文件系统上,但表示为单个“文件”。(例如使用并行文件系统存储数据的 HIVE。)

然而,这些是默认配置。真正的数据库通常允许您在多个物理设备之间拆分数据。SQL Server 和 MySQL 将此称为分区。Oracle 将其称为表空间。这些通常由了解系统性能要求的知识渊博的 DBA 设置。

不过,最终的问题很容易回答。大多数数据库都提供两个选项:根据需要增加数据库的大小或者给数据库一个固定(或最大)的大小。我没有遇到过会自动将底层数据拆分成多个文件的数据库引擎,尽管像 Vertica 这样的新型列式数据库可能会做类似的事情。


1
使用单独的文件来存储每个表格。(如果我们将Access视为数据库的话。)Access并没有为每个表格单独的文件,而是dBASE有。Access不是也从未是一个数据库,它通常使用ACE或Jet数据库,其中任何一个都是完全良好的基于文件的数据库。 - Fionnuala
“一个单独的文件”可以有多大? - ghchoi
@GyuHyeonChoi 这取决于操作系统。 - Gordon Linoff
@GordonLinoff,您能否请检查一下我的问题(https://stackoverflow.com/questions/59478987/c-binary-file-i-o-operations-slow-down-how-db-handle-binary-files)?谢谢。 - ghchoi

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