LINUX.ORG.RU

История изменений

Исправление kiverattes, (текущая версия) :

Записи в страницах не двигаются, не удаляются. ID последовательные.

Есть отдельная «ссылочная страница», разбитая на 4-байтные ячейки. Ячейка номер 717 содержит номер записи, на которую ссылается запись 717. Если надо поменять порядок следования записей, меняется только виртуальный порядок путём записи в соответствующую ячейку на «ссылочной странице новой ссылки. Сами записи никто никогда не трогает.

При подъёме базы, нужно прочитать только эти ссылочные страницы, чтобы построить представление о том, какая запись на какую ссылается. Ссылочных страниц в 100500 раз меньше, чем страниц с записями, поэтому подъём дешёвый, а изменение кучи ссылок — это перезапись всего нескольких страниц.

На каждую операцию изменения порядка, изменения делаются в памяти и в журнал кладётся запись. Накопилось 512 записей — накатили журнал в памяти на ссылочные страницы, перезаписали ссылочные страницы. Журнал допускает повторное накатывание с любого места без искажения данных, поэтому падать можно в любой момент процедуры. Накатили журнал, записали ссылочные страницы, дропнули журнал.

Исходная версия kiverattes, :

Записи в страницах не двигаются, не удаляются. ID последовательные.

Есть отдельная «ссылочная страница», разбитая на 4-байтные ячейки. Ячейка номер 717 содержит номер записи, на которую ссылается запись 717. Если надо поменять порядок следования записей, меняется только виртуальный порядок путём записи в соответствующую ячейку на «ссылочной странице новой ссылки. Сами записи никто никогда не трогает.

При подъёме базы, нужно прочитать только эти ссылочные страницы, чтобы построить представление о том, какая запись на какую ссылается. Ссылочных страниц в 100500 раз меньше, чем страниц с записями, поэтому подъём дешёвый, а изменение кучи ссылок — это перезапись всего нескольких страниц.

На каждую операцию изменения порядка в журнал кладётся запись. Накопилось 512 записей — накатили журнал на ссылочные страницы, перезаписали ссылочные страницы. Журнал допускает повторное накатывание с любого места без искажения данных. Накатили журнал, записали ссылочные страницы, дропнули журнал.