出于学习/实验目的,我试图模仿我从研究数据库中学到的一些技巧。我很好奇MySQL(以及其他数据库)如何解决这个特殊问题。
所以我正在编写一个应用程序,与其他数据库一样,将记录并排存储在一个文件中。我使用另一个文件来索引记录的位置,以便快速查找它们。一切正常,直到我需要更新一个比当前版本更长的行。我有一些想法,但似乎没有一个对性能友好。
假设我想更新1,000条记录中的记录200。在我的逻辑中,我将文件光标放在行开始的位置,然后写入数据。假设该行的当前版本是100字节长(并且从下一条记录开始的第101字节开始)。新数据长度为150个字节,因此只需使用文件光标写入就会有效地覆盖下一个记录中的字节。
据我所知,你不能从光标“推送”文件中的数据 - 如果我能,它似乎不是最性能友好的操作。
我可以选择附加新数据并用NULL字节替换当前行。但这似乎是a)浪费空间b)再次,需要大量的机器工作来重建文件而没有NULL字节
然后就是碎片整理的选择,但我还没准备好去那个方向。
有谁知道其他数据库如何处理这个问题?
其他数据库以多种方式处理此问题。我可以回答MySQL。
还有许多其他技巧可能。不值得尝试将存储优化到字节,因为只要您这样做,另一个数据更新将需要您撤消它。优化快速更新通常比完全紧凑的存储更好。一切都归结为不同类型的效率(例如,速度与存储)之间的权衡,您必须做出一些关于什么对您的数据库更重要的决定。