mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-19 19:39:26 +08:00
mdbx: добавление rkl с итераторами.
RKL — сортированный набор txnid, использующий внутри комбинацию непрерывного интервала и списка. Обеспечивает хранение id записей при переработке, очистку и обновлении GC, включая возврат остатков переработанных страниц. Итератор для RKL — обеспечивает изоляцию внутреннего устройства rkl от остального кода, чем существенно его упрощает. Фактически именно использованием rkl с итераторами ликвидируется "ребус" исторически образовавшийся в gc-update. -- При переработке GC записи преимущественно выбираются последовательно, но это не гарантируется. В LIFO-режиме переработка и добавление записей в rkl происходит преимущественно в обратном порядке, но из-за завершения читающих транзакций могут быть «скачки» в прямом направлении. В FIFO-режиме записи GC перерабатываются в прямом порядке и при этом линейно, но не обязательно строго последовательно, при этом гарантируется что между добавляемыми в rkl идентификаторами в GC нет записей, т.е. между первой (минимальный id) и последней (максимальный id) в GC нет записей и весь интервал может быть использован для возврата остатков страниц в GC. Таким образом, комбинация линейного интервала и списка (отсортированного в порядке возрастания элементов) является рациональным решением, близким к теоретически оптимальному пределу. Реализация rkl достаточно проста/прозрачная, если не считать неочевидную «магию» обмена непрерывного интервала и образующихся в списке последовательностей. Однако, именно этот автоматически выполняемый без лишних операций обмен оправдывает все накладные расходы.
This commit is contained in:
@@ -132,6 +132,8 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/preface.h"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/proto.h"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/refund.c"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/rkl.c"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/rkl.h"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/sort.h"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/spill.c"
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/spill.h"
|
||||
@@ -832,6 +834,8 @@ else()
|
||||
"${MDBX_SOURCE_DIR}/preface.h"
|
||||
"${MDBX_SOURCE_DIR}/proto.h"
|
||||
"${MDBX_SOURCE_DIR}/refund.c"
|
||||
"${MDBX_SOURCE_DIR}/rkl.c"
|
||||
"${MDBX_SOURCE_DIR}/rkl.h"
|
||||
"${MDBX_SOURCE_DIR}/sort.h"
|
||||
"${MDBX_SOURCE_DIR}/spill.c"
|
||||
"${MDBX_SOURCE_DIR}/spill.h"
|
||||
|
Reference in New Issue
Block a user