目前正在学习数据库文件储存,希望能够通过自己的努力制作出第一个属于自己的简单关系型数据库。
现在我打算为数据库设计一个存储系统,计划采取的方案是可变长存储方式,在划分好的每个 4 KB的块之中,按照“块元信息 + 块数据”的方式进行存储,但是我现在对一件事情感到担忧:
一般来说,UNIX 提供了按块读写文件的方式(lseek),也提供了性能良好的write和read函数,但是,一般数据库文件的读与写,往往是并发进行的(因为总是有多个连接请求)
因此,这就意味着数据库的文件偏移量,往往对于不同的连接有不同的数据,这样的话,很有可能就会造成文件数据的损坏。
查询了一下 UNIX 的文件 API,UNIX 确实提供了文件锁的机制,可以对文件的某一块进行锁定,但是考虑到由于写会造成文件总体的偏移量改变,所以还是感觉非常不确定。
请问大家一般这种场景是如何进行解决的呢?