我想了解更多关于数据库以及它们如何在低级别工作的知识,因此我可以尝试编写一个非常非常基本的数据库用于学习目的。我想知道像MySQL和SQL Server这样的数据库是否使用传统的文件I / O来读取数据库文件,或者是否有更先进的机制来读取磁盘扇区或特定块?
传统的文件I / O我的意思是使用像
这样的东西FILE *fopen(const char *filename, const char *mode)
在C.
我知道InnoDB在数据库中使用16kb页面来存储元数据和记录。我不知道他们是否只是预先估算了他们可能需要跳过多少页面才能根据索引查找值,然后在文件中查找该页面或者他们是否有更高级的访问控制。
答案 0 :(得分:0)
我找到了Joseph M. Hellerstein,Michael Stonebraker的研究论文here 和James Hamilton一起解释了存储管理,从第210页开始。它讨论了DBMS如何使用文件系统或原始磁盘访问来写入逻辑顺序块。
DBMS可以使用/或甚至两种类型的磁盘访问来管理数据库。从原始磁盘访问中获得稍微更好的性能,但原始访问带来一些缺点,例如将完整分区专用于数据库。可以使用大文件,并且文件偏移量通常足够接近磁盘上的物理位置,因此在最佳情况下,大文件的I / O性能降低最小。
virtual disk是模拟原始磁盘访问的另一种选择,根据研究报告,它正在成为常态。