mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-31 10:58:20 +08:00
mdbx: refine README.
This commit is contained in:
parent
a63c18261a
commit
e68cce8412
192
README.md
192
README.md
@ -1,16 +1,6 @@
|
|||||||
### IMPENDING CHANGES WARNING
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
**Now MDBX is under active development and until November 2017 is expected a big
|
|
||||||
change both of API and database format. Unfortunately those update will lead to
|
|
||||||
loss of compatibility with previous versions.**
|
|
||||||
|
|
||||||
The aim of this revolution in providing a clearer robust API and adding new
|
|
||||||
features, including the database properties.
|
|
||||||
|
|
||||||
libmdbx
|
libmdbx
|
||||||
======================================
|
======================================
|
||||||
Extended LMDB, aka "Расширенная LMDB".
|
**The revised and extended descendant of [Symas LMDB](https://symas.com/lmdb/).**
|
||||||
|
|
||||||
*The Future will Positive. Всё будет хорошо.*
|
*The Future will Positive. Всё будет хорошо.*
|
||||||
[![Build Status](https://travis-ci.org/leo-yuriev/libmdbx.svg?branch=master)](https://travis-ci.org/leo-yuriev/libmdbx)
|
[![Build Status](https://travis-ci.org/leo-yuriev/libmdbx.svg?branch=master)](https://travis-ci.org/leo-yuriev/libmdbx)
|
||||||
@ -20,8 +10,36 @@ Extended LMDB, aka "Расширенная LMDB".
|
|||||||
English version [by Google](https://translate.googleusercontent.com/translate_c?act=url&ie=UTF8&sl=ru&tl=en&u=https://github.com/leo-yuriev/libmdbx/tree/master)
|
English version [by Google](https://translate.googleusercontent.com/translate_c?act=url&ie=UTF8&sl=ru&tl=en&u=https://github.com/leo-yuriev/libmdbx/tree/master)
|
||||||
and [by Yandex](https://translate.yandex.ru/translate?url=https%3A%2F%2Fgithub.com%2FReOpen%2Flibmdbx%2Ftree%2Fmaster&lang=ru-en).
|
and [by Yandex](https://translate.yandex.ru/translate?url=https%3A%2F%2Fgithub.com%2FReOpen%2Flibmdbx%2Ftree%2Fmaster&lang=ru-en).
|
||||||
|
|
||||||
|
### Project Status
|
||||||
|
|
||||||
## Кратко
|
**Now MDBX is under _active development_** and until 2018 is expected a big
|
||||||
|
change both of API and database format. Unfortunately those update will lead to
|
||||||
|
loss of compatibility with previous versions.
|
||||||
|
|
||||||
|
The aim of this revolution in providing a clearer robust API and adding new
|
||||||
|
features, including the database properties.
|
||||||
|
|
||||||
|
|
||||||
|
## Содержание
|
||||||
|
|
||||||
|
- [Обзор](#Обзор)
|
||||||
|
- [Сравнение с другими СУБД](#Сравнение-с-другими-СУБД)
|
||||||
|
- [История & Acknowledgements](#История)
|
||||||
|
- [Основные свойства](#Основные-свойства)
|
||||||
|
- [Сравнение производительности](#Сравнение-производительности)
|
||||||
|
- [Интегральная производительность](#Интегральная-производительность)
|
||||||
|
- [Масштабируемость чтения](#Масштабируемость-чтения)
|
||||||
|
- [Синхронная фиксация](#Синхронная-фиксация)
|
||||||
|
- [Отложенная фиксация](#Отложенная-фиксация)
|
||||||
|
- [Асинхронная фиксация](#Асинхронная-фиксация)
|
||||||
|
- [Потребление ресурсов](#Потребление-ресурсов)
|
||||||
|
- [Недостатки и Компромиссы](#Недостатки-и-Компромиссы)
|
||||||
|
- [Проблема долгих чтений](#Проблема-долгих-чтений)
|
||||||
|
- [Сохранность данных в режиме асинхронной фиксации](#Сохранность-данных-в-режиме-асинхронной-фиксации)
|
||||||
|
- [Доработки и усовершенствования относительно LMDB](#Доработки-и-усовершенствования-относительно-lmdb)
|
||||||
|
|
||||||
|
|
||||||
|
## Обзор
|
||||||
|
|
||||||
_libmdbx_ - это встраиваемый key-value движок хранения со специфическим
|
_libmdbx_ - это встраиваемый key-value движок хранения со специфическим
|
||||||
набором свойств и возможностей, ориентированный на создание уникальных
|
набором свойств и возможностей, ориентированный на создание уникальных
|
||||||
@ -43,10 +61,19 @@ _libmdbx_ позволяет выполнять операции чтения с
|
|||||||
параллельно на каждом ядре CPU, без использования атомарных операций
|
параллельно на каждом ядре CPU, без использования атомарных операций
|
||||||
и/или примитивов синхронизации.
|
и/или примитивов синхронизации.
|
||||||
|
|
||||||
|
_libmdbx_ не использует [LSM](https://en.wikipedia.org/wiki/Log-structured_merge-tree), а основан на [B+Tree](https://en.wikipedia.org/wiki/B%2B_tree) с [отображением](https://en.wikipedia.org/wiki/Memory-mapped_file) всех данных в память,
|
||||||
|
при этом текущая версия не использует [WAL](https://en.wikipedia.org/wiki/Write-ahead_logging).
|
||||||
|
Это предопределяет многие свойства, в том числе удачные и противопоказанные сценарии использования.
|
||||||
|
|
||||||
|
### Сравнение с другими СУБД
|
||||||
|
|
||||||
|
Ввиду того, что в _libmdbx_ сейчас происходит революция, я посчитал лучшим решением
|
||||||
|
ограничится здесь ссылкой на [главу Comparison with other databases](https://github.com/coreos/bbolt#comparison-with-other-databases) в описании _BoltDB_.
|
||||||
|
|
||||||
|
|
||||||
### История
|
### История
|
||||||
|
|
||||||
_libmdbx_ является развитием "Lightning Memory-Mapped Database",
|
_libmdbx_ является результатом переработки и развития "Lightning Memory-Mapped Database",
|
||||||
известной под аббревиатурой
|
известной под аббревиатурой
|
||||||
[LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database).
|
[LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database).
|
||||||
Изначально доработка производилась в составе проекта
|
Изначально доработка производилась в составе проекта
|
||||||
@ -63,7 +90,7 @@ Tables](https://github.com/leo-yuriev/libfpta), aka ["Позитивные
|
|||||||
Technologies](https://www.ptsecurity.ru).
|
Technologies](https://www.ptsecurity.ru).
|
||||||
|
|
||||||
|
|
||||||
## Acknowledgements
|
#### Acknowledgements
|
||||||
|
|
||||||
Howard Chu (Symas Corporation) - the author of LMDB,
|
Howard Chu (Symas Corporation) - the author of LMDB,
|
||||||
from which originated the MDBX in 2015.
|
from which originated the MDBX in 2015.
|
||||||
@ -72,8 +99,8 @@ Martin Hedenfalk <martin@bzero.se> - the author of `btree.c` code,
|
|||||||
which was used for begin development of LMDB.
|
which was used for begin development of LMDB.
|
||||||
|
|
||||||
|
|
||||||
Характеристики и ключевые особенности
|
Основные свойства
|
||||||
=====================================
|
=================
|
||||||
|
|
||||||
_libmdbx_ наследует все ключевые возможности и особенности от
|
_libmdbx_ наследует все ключевые возможности и особенности от
|
||||||
своего прародителя [LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database),
|
своего прародителя [LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database),
|
||||||
@ -124,6 +151,7 @@ _libmdbx_ наследует все ключевые возможности и
|
|||||||
|
|
||||||
Сравнение производительности
|
Сравнение производительности
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Все представленные ниже данные получены многократным прогоном тестов на
|
Все представленные ниже данные получены многократным прогоном тестов на
|
||||||
ноутбуке Lenovo Carbon-2, i7-4600U 2.1 ГГц, 8 Гб ОЗУ, с SSD-диском
|
ноутбуке Lenovo Carbon-2, i7-4600U 2.1 ГГц, 8 Гб ОЗУ, с SSD-диском
|
||||||
SAMSUNG MZNTD512HAGL-000L1 (DXT23L0Q) 512 Гб.
|
SAMSUNG MZNTD512HAGL-000L1 (DXT23L0Q) 512 Гб.
|
||||||
@ -135,7 +163,6 @@ github](https://github.com/pmwkaa/ioarena/tree/HL%2B%2B2015).
|
|||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
### Интегральная производительность
|
### Интегральная производительность
|
||||||
![Comparison #1: Integral Performance](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-1.png)
|
|
||||||
|
|
||||||
Показана соотнесенная сумма ключевых показателей производительности в трёх
|
Показана соотнесенная сумма ключевых показателей производительности в трёх
|
||||||
бенчмарках:
|
бенчмарках:
|
||||||
@ -158,19 +185,21 @@ github](https://github.com/pmwkaa/ioarena/tree/HL%2B%2B2015).
|
|||||||
2. Превосходство libmdbx становится еще более подавляющем, что мешает
|
2. Превосходство libmdbx становится еще более подавляющем, что мешает
|
||||||
восприятию информации.
|
восприятию информации.
|
||||||
|
|
||||||
|
![Comparison #1: Integral Performance](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-1.png)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
### Масштабируемость чтения
|
### Масштабируемость чтения
|
||||||
![Comparison #2: Read Scalability](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-2.png)
|
|
||||||
|
|
||||||
Для каждого движка показана суммарная производительность при
|
Для каждого движка показана суммарная производительность при
|
||||||
одновременном выполнении запросов чтения/поиска в 1-2-4-8 потоков на
|
одновременном выполнении запросов чтения/поиска в 1-2-4-8 потоков на
|
||||||
машине с 4-мя физическими процессорами.
|
машине с 4-мя физическими процессорами.
|
||||||
|
|
||||||
|
![Comparison #2: Read Scalability](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-2.png)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
### Синхронная фиксация
|
### Синхронная фиксация
|
||||||
![Comparison #3: Sync-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-3.png)
|
|
||||||
|
|
||||||
- Линейная шкала слева и темные прямоугольники соответствуют количеству
|
- Линейная шкала слева и темные прямоугольники соответствуют количеству
|
||||||
транзакций в секунду, усредненному за всё время теста.
|
транзакций в секунду, усредненному за всё время теста.
|
||||||
@ -192,10 +221,11 @@ github](https://github.com/pmwkaa/ioarena/tree/HL%2B%2B2015).
|
|||||||
на пустой базе, а при завершении, в результате выполняемых действий, в
|
на пустой базе, а при завершении, в результате выполняемых действий, в
|
||||||
базе насчитывается 10.000 небольших key-value записей.
|
базе насчитывается 10.000 небольших key-value записей.
|
||||||
|
|
||||||
|
![Comparison #3: Sync-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-3.png)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
### Отложенная фиксация
|
### Отложенная фиксация
|
||||||
![Comparison #4: Lazy-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-4.png)
|
|
||||||
|
|
||||||
- Линейная шкала слева и темные прямоугольники соответствуют количеству
|
- Линейная шкала слева и темные прямоугольники соответствуют количеству
|
||||||
транзакций в секунду, усредненному за всё время теста.
|
транзакций в секунду, усредненному за всё время теста.
|
||||||
@ -222,10 +252,11 @@ _libmdbx_ при этом не ведет WAL, а передает весь ко
|
|||||||
на пустой базе, а при завершении, в результате выполняемых действий, в
|
на пустой базе, а при завершении, в результате выполняемых действий, в
|
||||||
базе насчитывается 100.000 небольших key-value записей.
|
базе насчитывается 100.000 небольших key-value записей.
|
||||||
|
|
||||||
|
![Comparison #4: Lazy-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-4.png)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
### Асинхронная фиксация
|
### Асинхронная фиксация
|
||||||
![Comparison #5: Async-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-5.png)
|
|
||||||
|
|
||||||
- Линейная шкала слева и темные прямоугольники соответствуют количеству
|
- Линейная шкала слева и темные прямоугольники соответствуют количеству
|
||||||
транзакций в секунду, усредненному за всё время теста.
|
транзакций в секунду, усредненному за всё время теста.
|
||||||
@ -251,10 +282,11 @@ _libmdbx_ при этом не ведет WAL, а передает весь ко
|
|||||||
на пустой базе, а при завершении, в результате выполняемых действий, в
|
на пустой базе, а при завершении, в результате выполняемых действий, в
|
||||||
базе насчитывается 10.000 небольших key-value записей.
|
базе насчитывается 10.000 небольших key-value записей.
|
||||||
|
|
||||||
|
![Comparison #5: Async-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-5.png)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
### Стоимость как потребление ресурсов
|
### Потребление ресурсов
|
||||||
![Comparison #6: Cost comparison](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-6.png)
|
|
||||||
|
|
||||||
Показана соотнесенная сумма использованных ресурсов в ходе бенчмарка в
|
Показана соотнесенная сумма использованных ресурсов в ходе бенчмарка в
|
||||||
режиме отложенной фиксации:
|
режиме отложенной фиксации:
|
||||||
@ -278,6 +310,8 @@ _libmdbx_ при этом не ведет WAL, а передает весь ко
|
|||||||
[getrusage()](http://man7.org/linux/man-pages/man2/getrusage.2.html) и
|
[getrusage()](http://man7.org/linux/man-pages/man2/getrusage.2.html) и
|
||||||
сканированием директорий с данными.
|
сканированием директорий с данными.
|
||||||
|
|
||||||
|
![Comparison #6: Cost comparison](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-6.png)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
## Недостатки и Компромиссы
|
## Недостатки и Компромиссы
|
||||||
@ -404,26 +438,73 @@ _libmdbx_ при этом не ведет WAL, а передает весь ко
|
|||||||
при включении `LIFO RECLAIM` в _libmdbx_.
|
при включении `LIFO RECLAIM` в _libmdbx_.
|
||||||
|
|
||||||
|
|
||||||
#### Вероятность разрушения БД в режиме `WRITEMAP+MAPASYNC`
|
#### Сохранность данных в режиме асинхронной фиксации
|
||||||
|
|
||||||
При работе в режиме `WRITEMAP+MAPSYNC` запись измененных страниц
|
При работе в режиме `WRITEMAP+MAPSYNC` запись измененных страниц
|
||||||
выполняется ядром ОС, что имеет ряд преимуществ. Так например, при крахе
|
выполняется ядром ОС, что имеет ряд преимуществ. Так например, при крахе
|
||||||
приложения, ядро ОС сохранит все изменения.
|
приложения, ядро ОС сохранит все изменения.
|
||||||
|
|
||||||
Однако, при аварийном отключении питания или сбое в ядре ОС, на диске
|
Однако, при аварийном отключении питания или сбое в ядре ОС, на диске
|
||||||
будет сохранена только часть измененных страниц БД. При этом с большой
|
может быть сохранена только часть измененных страниц БД. При этом с большой
|
||||||
вероятностью может оказаться так, что будут сохранены мета-страницы со
|
вероятностью может оказаться так, что будут сохранены мета-страницы со
|
||||||
ссылками на страницы с новыми версиями данных, но не сами новые данные.
|
ссылками на страницы с новыми версиями данных, но не сами новые данные.
|
||||||
В этом случае БД будет безвозвратна разрушена, даже если до аварии
|
В этом случае БД будет безвозвратна разрушена, даже если до аварии
|
||||||
производилась полная синхронизация данных (посредством
|
производилась полная синхронизация данных (посредством
|
||||||
`mdbx_env_sync()`).
|
`mdbx_env_sync()`).
|
||||||
|
|
||||||
В _libmdbx_ эта проблема устранена, подробности ниже.
|
В _libmdbx_ эта проблема устранена путем полной переработки
|
||||||
|
пути записи данных:
|
||||||
|
|
||||||
|
* В режиме `WRITEMAP+MAPSYNC` _libmdbx_ не обновляет
|
||||||
|
мета-страницы непосредственно, а поддерживает их теневые копии
|
||||||
|
с переносом изменений после фиксации данных.
|
||||||
|
|
||||||
|
* При завершении транзакций, в зависимости от состояния
|
||||||
|
синхронности данных между диском и оперативной память,
|
||||||
|
_libmdbx_ помечает точки фиксации либо как сильные (strong),
|
||||||
|
либо как слабые (weak). Так например, в режиме
|
||||||
|
`WRITEMAP+MAPSYNC` завершаемые транзакции помечаются как
|
||||||
|
слабые, а при явной синхронизации данных как сильные.
|
||||||
|
|
||||||
|
* В _libmdbx_ поддерживается не две, а три отдельные мета-страницы.
|
||||||
|
Это позволяет выполнять фиксацию транзакций с формированием как
|
||||||
|
сильной, так и слабой точки фиксации, без потери двух предыдущих
|
||||||
|
точек фиксации (из которых одна может быть сильной, а вторая слабой).
|
||||||
|
В результате, _libmdbx_ позволяет в произвольном порядке чередовать
|
||||||
|
сильные и слабые точки фиксации без нарушения соответствующих
|
||||||
|
гарантий в случае неожиданной системной аварии во время фиксации.
|
||||||
|
|
||||||
|
* При открытии БД выполняется автоматический откат к последней
|
||||||
|
сильной фиксации. Этим обеспечивается гарантия сохранности БД.
|
||||||
|
|
||||||
|
Такая гарантия надежности не дается бесплатно. Для
|
||||||
|
сохранности данных, страницы формирующие крайний снимок с
|
||||||
|
сильной фиксацией, не должны повторно использоваться
|
||||||
|
(перезаписываться) до формирования следующей сильной точки
|
||||||
|
фиксации. Таким образом, крайняя точка фиксации создает
|
||||||
|
описанный выше эффект "долгого чтения". Разница же здесь в том,
|
||||||
|
что при исчерпании свободных страниц ситуация будет
|
||||||
|
автоматически исправлена, посредством записи изменений на диск
|
||||||
|
и формированием новой сильной точки фиксации.
|
||||||
|
|
||||||
|
Таким образом, в режиме безопасной асинхронной фиксации _libmdbx_ будет
|
||||||
|
всегда использовать новые страницы до исчерпания места в БД или до явного
|
||||||
|
формирования сильной точки фиксации посредством `mdbx_env_sync()`.
|
||||||
|
При этом суммарный трафик записи на диск будет примерно такой-же,
|
||||||
|
как если бы отдельно фиксировалась каждая транзакций.
|
||||||
|
|
||||||
|
В текущей версии _libmdbx_ вам предоставляется выбор между безопасным
|
||||||
|
режимом (по умолчанию) асинхронной фиксации, и режимом `UTTERLY_NOSYNC` когда
|
||||||
|
при системной аварии есть шанс полного разрушения БД как в LMDB.
|
||||||
|
|
||||||
|
В последующих версиях _libmdbx_ будут предусмотрены средства
|
||||||
|
для асинхронной записи данных на диск с автоматическим
|
||||||
|
формированием сильных точек фиксации.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
Дополнительные "фичи" _libmdbx_ относительно LMDB
|
Доработки и усовершенствования относительно LMDB
|
||||||
=================================================
|
================================================
|
||||||
|
|
||||||
1. Режим `LIFO RECLAIM`.
|
1. Режим `LIFO RECLAIM`.
|
||||||
|
|
||||||
@ -461,56 +542,11 @@ _libmdbx_ при этом не ведет WAL, а передает весь ко
|
|||||||
|
|
||||||
3. Гарантия сохранности БД в режиме `WRITEMAP+MAPSYNC`.
|
3. Гарантия сохранности БД в режиме `WRITEMAP+MAPSYNC`.
|
||||||
|
|
||||||
При работе в режиме `WRITEMAP+MAPSYNC` запись измененных
|
В текущей версии _libmdbx_ вам предоставляется выбор между безопасным
|
||||||
страниц выполняется ядром ОС, что имеет ряд преимуществ. Так
|
режимом (по умолчанию) асинхронной фиксации, и режимом `UTTERLY_NOSYNC`
|
||||||
например, при крахе приложения, ядро ОС сохранит все изменения.
|
когда при системной аварии есть шанс полного разрушения БД как в LMDB.
|
||||||
|
Для подробностей смотрите раздел
|
||||||
Однако, при аварийном отключении питания или сбое в ядре ОС, на
|
[Сохранность данных в режиме асинхронной фиксации](#Сохранность-данных-в-режиме-асинхронной-фиксации).
|
||||||
диске будет сохранена только часть измененных страниц БД. При
|
|
||||||
этом с большой вероятностью может оказаться так, что будут
|
|
||||||
сохранены мета-страницы со ссылками на страницы с новыми
|
|
||||||
версиями данных, но не сами новые данные. В этом случае БД
|
|
||||||
будет безвозвратна разрушена, даже если до аварии производилась
|
|
||||||
полная синхронизация данных (посредством `mdbx_env_sync()`).
|
|
||||||
|
|
||||||
В _libmdbx_ эта проблема устранена путем полной переработки
|
|
||||||
пути записи данных:
|
|
||||||
|
|
||||||
* В режиме `WRITEMAP+MAPSYNC` _libmdbx_ не обновляет
|
|
||||||
мета-страницы непосредственно, а поддерживает их теневые копии
|
|
||||||
с переносом изменений после фиксации данных.
|
|
||||||
|
|
||||||
* При завершении транзакций, в зависимости от состояния
|
|
||||||
синхронности данных между диском и оперативной память,
|
|
||||||
_libmdbx_ помечает точки фиксации либо как сильные (strong),
|
|
||||||
либо как слабые (weak). Так например, в режиме
|
|
||||||
`WRITEMAP+MAPSYNC` завершаемые транзакции помечаются как
|
|
||||||
слабые, а при явной синхронизации данных как сильные.
|
|
||||||
|
|
||||||
* В _libmdbx_ поддерживается не две, а три отдельные мета-страницы.
|
|
||||||
Это позволяет выполнять фиксацию транзакций с формированием как
|
|
||||||
сильной, так и слабой точки фиксации, без потери двух предыдущих
|
|
||||||
точек фиксации (из которых одна может быть сильной, а вторая слабой).
|
|
||||||
В результате, _libmdbx_ позволяет в произвольном порядке чередовать
|
|
||||||
сильные и слабые точки фиксации без нарушения соответствующих
|
|
||||||
гарантий в случае неожиданной системной аварии во время фиксации.
|
|
||||||
|
|
||||||
* При открытии БД выполняется автоматический откат к последней
|
|
||||||
сильной фиксации. Этим обеспечивается гарантия сохранности БД.
|
|
||||||
|
|
||||||
К сожалению, такая гарантия надежности не дается бесплатно. Для
|
|
||||||
сохранности данных, страницы формирующие крайний снимок с
|
|
||||||
сильной фиксацией, не должны повторно использоваться
|
|
||||||
(перезаписываться) до формирования следующей сильной точки
|
|
||||||
фиксации. Таким образом, крайняя точка фиксации создает
|
|
||||||
описанный выше эффект "долгого чтения". Разница же здесь в том,
|
|
||||||
что при исчерпании свободных страниц ситуация будет
|
|
||||||
автоматически исправлена, посредством записи изменений на диск
|
|
||||||
и формированием новой сильной точки фиксации.
|
|
||||||
|
|
||||||
В последующих версиях _libmdbx_ будут предусмотрены средства
|
|
||||||
для асинхронной записи данных на диск с автоматическим
|
|
||||||
формированием сильных точек фиксации.
|
|
||||||
|
|
||||||
4. Возможность автоматического формирования контрольных точек
|
4. Возможность автоматического формирования контрольных точек
|
||||||
(сброса данных на диск) при накоплении заданного объёма изменений,
|
(сброса данных на диск) при накоплении заданного объёма изменений,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user