11<!-- Required extensions: pymdownx.betterem, pymdownx.tilde, pymdownx.emoji, pymdownx.tasklist, pymdownx.superfences -->
22
3- > Please refer to the online [ documentation] ( https://libmdbx.dqdkfa.ru )
4- > with [ ` C ` API description] ( https://libmdbx.dqdkfa.ru/group__c__api.html )
5- > and pay attention to the [ ` C++ ` API] ( https://gitflic.ru/project/erthink/libmdbx/blob?file=mdbx.h%2B%2B#line-num-1 ) .
6-
7- > Questions, feedback and suggestions are welcome to the [ Telegram' group] ( https://t.me/libmdbx ) (archive [ 1] ( https://libmdbx.dqdkfa.ru/tg-archive/messages1.html ) ,
8- > [ 2] ( https://libmdbx.dqdkfa.ru/tg-archive/messages2.html ) , [ 3] ( https://libmdbx.dqdkfa.ru/tg-archive/messages3.html ) , [ 4] ( https://libmdbx.dqdkfa.ru/tg-archive/messages4.html ) ,
9- > [ 5] ( https://libmdbx.dqdkfa.ru/tg-archive/messages5.html ) , [ 6] ( https://libmdbx.dqdkfa.ru/tg-archive/messages6.html ) , [ 7] ( https://libmdbx.dqdkfa.ru/tg-archive/messages7.html ) ).
10- > See the [ ChangeLog] ( https://gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md ) for ` NEWS ` and latest updates.
11-
12- > Donations are welcome to the Ethereum/ERC-20 ` 0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A ` .
13- > Всё будет хорошо!
14-
153libmdbx
164========
175
@@ -38,32 +26,44 @@ tree](https://en.wikipedia.org/wiki/B%2B_tree).
3826[ WAL] ( https://en.wikipedia.org/wiki/Write-ahead_logging ) , but that might
3927be a caveat for write-intensive workloads with durability requirements.
4028
41- 4 . ** Compact and friendly for fully embedding** . Only ≈25KLOC of ` C11 ` ,
42- ≈64K x86 binary code of core, no internal threads neither server process(es),
43- but implements a simplified variant of the [ Berkeley
44- DB] ( https://en.wikipedia.org/wiki/Berkeley_DB ) and
45- [ dbm] ( https://en.wikipedia.org/wiki/DBM_(computing) ) API.
46-
47- 5 . Enforces [ serializability] ( https://en.wikipedia.org/wiki/Serializability ) for
29+ 4 . Enforces [ serializability] ( https://en.wikipedia.org/wiki/Serializability ) for
4830writers just by single
4931[ mutex] ( https://en.wikipedia.org/wiki/Mutual_exclusion ) and affords
5032[ wait-free] ( https://en.wikipedia.org/wiki/Non-blocking_algorithm#Wait-freedom )
5133for parallel readers without atomic/interlocked operations, while
5234** writing and reading transactions do not block each other** .
5335
54- 6 . ** Guarantee data integrity** after crash unless this was explicitly
36+ 5 . ** Guarantee data integrity** after crash unless this was explicitly
5537neglected in favour of write performance.
5638
57- 7 . Supports Linux, Windows, MacOS, Android, iOS, FreeBSD, DragonFly, Solaris,
39+ 6 . Supports Linux, Windows, MacOS, Android, iOS, FreeBSD, DragonFly, Solaris,
5840OpenSolaris, OpenIndiana, NetBSD, OpenBSD and other systems compliant with
5941** POSIX.1-2008** .
6042
43+ 7 . ** Compact and friendly for fully embedding** . Only ≈25KLOC of ` C11 ` ,
44+ ≈64K x86 binary code of core, no internal threads neither server process(es),
45+ but implements a simplified variant of the [ Berkeley
46+ DB] ( https://en.wikipedia.org/wiki/Berkeley_DB ) and
47+ [ dbm] ( https://en.wikipedia.org/wiki/DBM_(computing) ) API.
48+
6149<!-- section-end -->
6250
63- Historically, _ libmdbx_ is a deeply revised and extended descendant of the amazing
51+ Historically, _ libmdbx_ is a deeply revised and extended descendant of the legendary
6452[ Lightning Memory-Mapped Database] ( https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database ) .
6553_ libmdbx_ inherits all benefits from _ LMDB_ , but resolves some issues and adds [ a set of improvements] ( #improvements-beyond-lmdb ) .
6654
55+ [ ![ Telergam: Support | Discussions | News] ( https://img.shields.io/endpoint?color=scarlet&logo=telegram&label=Support%20%7C%20Discussions%20%7C%20News&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Flibmdbx )] ( https://t.me/libmdbx )
56+
57+ > Please refer to the online [ documentation] ( https://libmdbx.dqdkfa.ru )
58+ > with [ ` C ` API description] ( https://libmdbx.dqdkfa.ru/group__c__api.html )
59+ > and pay attention to the [ ` C++ ` API] ( https://gitflic.ru/project/erthink/libmdbx/blob?file=mdbx.h%2B%2B#line-num-1 ) .
60+ > Donations are welcome to the Ethereum/ERC-20 ` 0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A ` .
61+ > Всё будет хорошо!
62+
63+ Telegram Group archive: [ 1] ( https://libmdbx.dqdkfa.ru/tg-archive/messages1.html ) ,
64+ [ 2] ( https://libmdbx.dqdkfa.ru/tg-archive/messages2.html ) , [ 3] ( https://libmdbx.dqdkfa.ru/tg-archive/messages3.html ) , [ 4] ( https://libmdbx.dqdkfa.ru/tg-archive/messages4.html ) ,
65+ [ 5] ( https://libmdbx.dqdkfa.ru/tg-archive/messages5.html ) , [ 6] ( https://libmdbx.dqdkfa.ru/tg-archive/messages6.html ) , [ 7] ( https://libmdbx.dqdkfa.ru/tg-archive/messages7.html ) .
66+
6767## Github
6868
6969### на Русском (мой родной язык)
@@ -125,8 +125,7 @@ of the database. All fundamental architectural problems of libmdbx/LMDB
125125have been solved there, but now the active development has been
126126suspended for top-three reasons:
127127
128- 1 . For now _ libmdbx_ «mostly» enough for all [ our products] ( https://www.ptsecurity.com/ww-en/products/ ) ,
129- and I’m busy in development of replication for scalability.
128+ 1 . For now _ libmdbx_ mostly enough and I’m busy for scalability.
1301292 . Waiting for fresh [ Elbrus CPU] ( https://wiki.elbrus.ru/ ) of [ e2k architecture] ( https://en.wikipedia.org/wiki/Elbrus_2000 ) ,
131130especially with hardware acceleration of [ Streebog] ( https://en.wikipedia.org/wiki/Streebog ) and
132131[ Kuznyechik] ( https://en.wikipedia.org/wiki/Kuznyechik ) , which are required for Merkle tree, etc.
@@ -551,9 +550,9 @@ Of course, in addition to this, your toolchain must ensure the reproducibility o
551550For more information please refer to [ reproducible-builds.org] ( https://reproducible-builds.org/ ) .
552551
553552#### Containers
554- There are no special traits nor quirks if you use libmdbx ONLY inside the single container.
555- But in a cross-container cases or with a host-container(s) mix the two major things MUST be
556- guaranteed:
553+ There are no special traits nor quirks if you use _ libmdbx _ ONLY inside
554+ the single container. But in a cross-container(s) or with a host-container(s)
555+ interoperability cases the three major things MUST be guaranteed:
557556
5585571 . Coherence of memory mapping content and unified page cache inside OS
559558kernel for host and all container(s) operated with a DB. Basically this
@@ -569,6 +568,12 @@ in the system memory.
569568 including ` ERROR_ACCESS_DENIED ` ,
570569 but not the ` ERROR_INVALID_PARAMETER ` as for an invalid/non-existent PID.
571570
571+ 3 . The versions/builds of _ libmdbx_ and ` libc ` /` pthreads ` (` glibc ` , ` musl ` , etc) must be be compatible.
572+ - Basically, the ` options: ` string in the output of ` mdbx_chk -V ` must be the same for host and container(s).
573+ See ` MDBX_LOCKING ` , ` MDBX_USE_OFDLOCKS ` and other build options for details.
574+ - Avoid using different versions of ` libc ` , especially mixing different implementations, i.e. ` glibc ` with ` musl ` , etc.
575+ Prefer to use the same LTS version, or switch to full virtualization/isolation if in doubt.
576+
572577#### DSO/DLL unloading and destructors of Thread-Local-Storage objects
573578When building _ libmdbx_ as a shared library or use static _ libmdbx_ as a
574579part of another dynamic library, it is advisable to make sure that your
0 commit comments