3

我有很多关于数据库如何工作的问题。

  1. 某处是否有包含数据的文件?

  2. 如果有类似的东西,这些记录是一起存储还是分开存储?像表cars都在一个文件中,或者每一行都有一个文件。

  3. 如果每个文件有多行,数据库如何并行更新同一张表中的不同行?例如,来自不同来源的 100 个同时更新请求。

我在这里读到数据库通常使用二叉树,它们是否会为每个请求重建它们从硬盘驱动器加载数据,然后在修改时保存?

谢谢。

4

2 回答 2

2

如前所述,所有这些问题的答案都是“视情况而定”。有许多实现,它们都在重要的细节上有所不同。

  1. 一个或多个文件。这些文件的组织是与特定 DBMS 相关的“魔法酱”的一部分。

  2. 数据的存储方式略有不同,但可以说很少或没有 DBMS 每行使用一个文件进行一般工作。数十亿(万亿,...)记录的名称管理不值得考虑,除此之外。

  3. 这又是特定 DBMS 的“魔法酱”的关键部分。他们都这样做;有很多不同的方法可以做到这一点。SQLite 使用与 Informix、DB2、Oracle、Sybase、MS SQL Server、MySQL、PostgreSQL、Teradata 完全不同的技术……使用了许多技术;有些使用锁定,有些使用基于时间戳或多版本并发控制。不同的 DBMS 有不同的序列化属性。

我不知道使用纯二叉树的 DBMS。大多数 DBMS 提供多种不同的组织,但最常见的一种是 B+-tree(与二叉树相关但不同);另一个是各种哈希表组织。大多数 DBMS 的主要目标之一是避免经常从头开始重建事物,另一个是尽可能避免从磁盘读取——通过使用缓存等。同样,这是特定 DBMS 的“魔法酱”。

于 2013-08-31T19:59:43.817 回答
0

对数据库上文件的所有写入都被缓冲,并且每隔几秒(在定义的时间间隔内)以同步方式写入文件一次。

Oracle 使用重做日志在提交之前跟踪更新或插入。有一个重做日志缓冲区,它在内存中的定义时间间隔为 3 秒,并且每 3 秒将写入文件作为单个进程。

于 2013-08-31T19:47:47.387 回答