数据库如何工作?

时间:2013-08-31 19:38:42

标签: database database-design

我对数据库如何运作有很多疑问。

  1. 文件中是否有文件?

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

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

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

    感谢。

2 个答案:

答案 0 :(得分:2)

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

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

  2. 它的数据存储方式有所不同,但可能会说很少或没有DBMS每行使用一个文件进行一般工作。几十亿(兆亿,......)记录的名称管理没有考虑,除此之外的所有其他记录。

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

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

答案 1 :(得分:0)

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

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