我一直在使用access和mysql...最近,我开始使用linux中的标准文件操作。由于数据库将数据存储在文件中,它们是在每个sql事务上执行文件操作,还是仅在关闭/打开数据库时执行文件操作?我认为用高效的数据结构将数据存储在ram中来处理更新,并且只写入关闭连接的文件会更有效率。我现在对关系代数不感兴趣,但是我在哪里可以找到更多的细节来回答我的问题?
发布于 2012-01-01 15:18:02
为了保持完整性,需要在每个事务完成后进行写入。
当执行COMMIT语句时,事务完成。
在单个事务中可能有许多语句(SELECT、INSERT、UPDATE和DELETE)。
仅在open和close上写入将不能为ACID事务提供足够的支持。
许多数据库维护单独的内部日志,目的是记录事务,写入日志是一项关键操作,日志可用于在崩溃恢复情况下重建数据库。
一些数据库实现可能选择在以后将实际实体数据持久化到磁盘,只要日志已经成功写入磁盘。
相同数据的后续读取可以从内存中的缓冲区中检索,如果在将实体数据写入磁盘之前发生崩溃,则恢复过程可以在下次启动时应用日志中的更改,从而允许数据库保持内部一致性。
发布于 2012-01-01 14:26:01
这比简单的文件系统与RAM的讨论复杂得多。MS SQL Server有记录良好的数据存储方法(我相信MySQL也有,但对访问不确定)。我将根据我使用MS SQL Server的经验来回答。
下面是一篇文章:http://msdn.microsoft.com/en-us/library/ms189051.aspx
围绕你的问题给出一些见解:
我认为用高效的数据结构将数据存储在ram中来处理更新,并且只写入关闭连接的文件,会更有效率。
我发现这篇关于MS SQL Server buffer编写的文章很有趣:http://msdn.microsoft.com/en-us/library/aa337525.aspx。
它可以更具体地回答您有关何时将数据写入磁盘的问题。
https://stackoverflow.com/questions/8692062
复制相似问题