我对数据库如何运作有很多疑问。
文件中是否有文件?
如果有类似的东西,记录是一起存储还是分开存储?就像表cars
就在一个文件中,或者每行都有一个文件。
如果每个文件有多行,那么数据库如何并行更新同一个表中的不同行?例如来自不同来源的100个同步更新请求。
我在这里读到数据库通常使用二叉树,他们是否重建它们从硬盘驱动器为每个请求加载数据然后保存,如果修改?
感谢。
答案 0 :(得分:2)
如前所述,所有这些问题的答案都是“它取决于”。有许多实现,它们在重要细节上都有所不同。
一个或多个文件。这些文件的组织是与特定DBMS相关联的“魔术酱”的一部分。
它的数据存储方式有所不同,但可能会说很少或没有DBMS每行使用一个文件进行一般工作。几十亿(兆亿,......)记录的名称管理没有考虑,除此之外的所有其他记录。
这又是特定DBMS“魔术酱”的关键部分。他们都这样做;有很多不同的方法可以做到这一点。 SQLite使用与Informix,DB2,Oracle,Sybase,MS SQL Server,MySQL,PostgreSQL,Teradata等完全不同的技术......使用了许多技术;一些使用锁定,另一些使用基于时间戳或多版本的并发控制。不同的DBMS有不同的序列化属性。
我不知道使用纯二进制树的DBMS。大多数DBMS提供多个不同的组织,但一个非常常见的组织是B + -tree(与二叉树相关但不同);另一个是各种哈希表组织。大多数DBMS的关键目标之一是避免经常从头开始重建事物,另一个是尽可能经常地从磁盘读取 - 通过使用缓存等。同样,这是特定DBMS的“神奇酱油”。
答案 1 :(得分:0)
对数据库中文件的所有写入都是缓冲的,并且每隔几秒(在定义的时间间隔内)以同步方式写入文件。
Oracle使用重做日志在提交之前跟踪更新或插入。有一个重做日志缓冲区,它在内存中用于定义间隔,例如3秒,每3秒将文件写入一个进程。