【发布时间】:2017-12-22 06:25:10
【问题描述】:
出于学习/实验目的,我试图模仿我从研究数据库中学到的一些技术。我很好奇 MySQL(可能还有其他数据库)如何解决这个特殊问题。
所以我正在编写一个应用程序,它与其他数据库一样,将记录并排存储在一个文件中。我使用另一个文件来索引记录的位置以快速查找它们。一切正常,直到我需要更新比当前版本长的行。我有一些想法,但似乎没有一个对性能非常友好。
假设我要更新 1,000 条记录中的第 200 条记录。在我的逻辑中,我将文件光标放在行开始的位置,然后写入数据。假设该行的当前版本长 100 个字节(从第 101 个字节开始下一条记录开始)。新数据的长度为 150 字节,因此仅使用文件游标写入将有效地覆盖下一条记录中的字节。
据我所知,您不能从光标将数据“推送”到文件中 - 如果可以的话,这似乎不是对性能最友好的操作。
我可以选择追加新数据并将当前行替换为 NULL 字节。但这似乎是 a) 浪费空间 b) 再次,需要大量机器工作来重建没有 NULL 字节的文件
还有碎片整理的选项,但我还没有准备好去那个方向。
有人知道其他数据库是如何处理这个问题的吗?
【问题讨论】:
标签: mysql database file cursor fwrite