From c96cc9c567162e3ef10959450f16b838b2178d84 Mon Sep 17 00:00:00 2001 From: Leo Yuriev Date: Mon, 9 Jan 2017 02:04:31 +0300 Subject: [PATCH] mdbx: minor refine README.md Change-Id: I7e2253fc83240b7653eac1690493dcd3ee5ebe97 --- README.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 48a6bcf8..930699ca 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,7 @@ Database](https://symas.com/products/lightning-memory-mapped-database/) Изначально модификация производилась в составе исходного кода проекта [ReOpenLDAP](https://github.com/ReOpen/ReOpenLDAP). Примерно за год работы -внесенные изменения приобрели самостоятельную ценность вне контекста -ReOpenLDAP. +внесенные изменения приобрели самостоятельную ценность. Осенью 2015 доработанный движок был выделен в отдельный проект, который был [представлен на конференции Highload++ @@ -192,19 +191,28 @@ MDBX. что имеет ряд преимуществ. Так например, при крахе приложения, ядро ОС сохранит все изменения. - Однако, при аварийном отключении питания или сбоя в ядре ОС, на диске будет + Однако, при аварийном отключении питания или сбое в ядре ОС, на диске будет сохранена только часть измененных страниц БД. При этом с большой вероятностью - может оказаться так, что будут сохранены мета-страницы с указателям на станицы - с новыми версиями данных, но не сами данные. В этом случае БД будет + может оказаться так, что будут сохранены мета-страницы со ссылками на страницы + с новыми версиями данных, но не сами новые данные. В этом случае БД будет безвозвратна разрушена, даже если до аварии производилась полная синхронизация данных (посредством `mdb_env_sync()`). - В MDBX эта проблема решена, на текущий момент как минимум частично. При - завершении транзакций MDBX помечает точки фиксации как сильные (strong), либо - как слабые (weak). Так в режиме `WRITEMAP` завершаемые транзакции помечаются - как слабые, а при явной синхронизации данных как сильные. При открытии БД - выполняется автоматический откат к последней сильной фиксации. Этим - обеспечивается гарантия сохранности БД. + В MDBX эта проблема решена путем полной переработки пути записи данных: + + * В режиме `WRITEMAP` MDBX не обновляет мета-страницы непосредственно, + а поддерживает их теневые копии с переносом изменений после фиксации + данных. + + * При завершении транзакций, в зависимости от состояния + синхронности данных между диском и оперативной память, MDBX помечает + точки фиксации либо как сильные (strong), либо как слабые (weak). Так + например, в режиме `WRITEMAP` завершаемые транзакции помечаются как + слабые, а при явной синхронизации данных как сильные. + + * При открытии БД + выполняется автоматический откат к последней сильной фиксации. Этим + обеспечивается гарантия сохранности БД. К сожалению, такая гарантия надежности не дается бесплатно. Для сохранности данных, страницы формирующие крайний снимок с сильной фиксацией, не должны