335 Commits

Author SHA1 Message Date
Leonid Yuriev
af9b7b5605 mdbx: MAJOR rework page splitting (squashed).
Basically, this (squashed) commit introduces:
 - An "auto-appending" feature upon insertion for both ascending and
   descending key sequences. As a result, the optimality of page filling
   increases significantly (more densely, less slackness) while
   inserting ordered sequences of keys,
 - A "splitting at middle" for more balanced page tree on average.

---

1. Using left/middle/right tactics for finding the split point of a page:
   - If a key is inserted close to an edge of page,
     then the page splits at that edge;
   - Otherwise a page splits at the middle,
     which leads to a more balanced tree on average;
   - So I expect a better behavior on average,
     but actually effects should be studied further practically.

2. New code for calculating the midpoint of a page split.

3. APPEND-flags no longer affect choosing the page split point.

4. Added left-side splitting by inserting a pure page with a new entry.

Change-Id: Id7441acfc8c90636e3be6bc00a0df15714690f3c
2021-03-29 00:49:34 +03:00
Leonid Yuriev
e0795227e4 mdbx: merge branch master into devel.
Change-Id: Ic78177f8bc5ab3dc1826e4e00599f1a7d3087dda
2021-03-29 00:00:43 +03:00
Leonid Yuriev
3ed99f8c20 mdbx: minor refine/fix cursor_check() internals.
Change-Id: I89ea9a5336b88e7d0201a7f59d66a8bc53849172
2021-03-28 23:34:41 +03:00
Leonid Yuriev
636c212235 mdbx: minor refine page_check().
Change-Id: I91cae256c47064422d26663078c8c5a6f619a197
2021-03-28 23:34:41 +03:00
Leonid Yuriev
83cd4f7d58 mdbx: separete DKBUF and DKBUF_DEBUG.
Change-Id: I8d90909ce9c5faec176a12e68f7bab6c2ea1d317
2021-03-28 23:34:41 +03:00
Leonid Yuriev
bfc9921305 mdbx: change branch-node size to ~1/2 of the page size.
Change-Id: I0f455ec04170d792ecc933aa501b4ec1ca9b08c0
2021-03-28 23:34:41 +03:00
Leonid Yuriev
72f3a2fc3f mdbx: check zero-size of the first key on a branch-page.
Change-Id: I2be86ea79f04ea8baea92a6e56ef6b22691eeda0
2021-03-28 22:25:40 +03:00
Leonid Yuriev
3c389d17e8 mdbx: minor refine page_rebalance().
Change-Id: I066e7a22d62c45f9e80fb4735f55f02ca34d3ee3
2021-03-28 22:25:30 +03:00
Leonid Yuriev
2524a0e749 mdbx: output page type from bad_page().
Change-Id: I11e4931de26015204c26c116e91e4a0e02f909b4
2021-03-28 22:25:24 +03:00
Leonid Yuriev
8d3b878965 mdbx: fix minor spelling.
Change-Id: Ibab66dc18c92b0ac4fa705e10befb34e268ee1f7
2021-03-28 22:25:17 +03:00
Leonid Yuriev
c77494e2aa mdbx: fix mdbx_env_set_option() for dp_initial & dp_limit.
Fixes https://github.com/erthink/libmdbx/issues/179

Change-Id: I925104a45148112e0ce94a069a7468e2b4fc8209
2021-03-24 19:27:31 +03:00
Leonid Yuriev
422d030820 mdbx: fix minor casting warning.
Change-Id: I9615b3928bb1b88743b42be9d82a986255d1f074
2021-03-19 03:16:47 +03:00
Leonid Yuriev
b3798a9116 mdbx: mdbx_node_search() micro-optimization.
Change-Id: I48064ca284aa89b16e418afdc20d09c5dd6e5cba
2021-03-19 00:17:14 +03:00
Leonid Yuriev
cb0ee2373d mdbx: add mdbx_cursor_set_ex() with non-optional exactp argument.
Resolves https://github.com/erthink/libmdbx/pull/178

Change-Id: I24dc7d44116b5e2e02b5b75375be24c647a762f5
2021-03-18 23:15:55 +03:00
Leonid Yuriev
d0b3c45f04 mdbx: refine check_dbi().
Change-Id: I6d51c27c3acdea1b93861f67a32cd3c1ee13dc0d
2021-03-18 23:12:56 +03:00
Leonid Yuriev
7dfd3f18f8 mdbx: rework nodes/keys limitations.
Change-Id: Id0515346d762d4554102775f26a0fc33f3c0f29e
2021-03-17 01:18:28 +03:00
Leonid Yuriev
b164baa1f5 mdbx: add MDBX_ENABLE_MADVISE build option/macro.
Change-Id: I6174ec62e4811e891663b8ae0f7918aa09baf5ab
2021-03-17 01:18:18 +03:00
Leonid Yuriev
3eb343020d mdbx: simplify check_txn_rw().
Change-Id: Id6a24068ffcdd29fe15a888985bd4a17f1de8ab4
2021-03-14 16:33:06 +03:00
Leonid Yuriev
4b8b7d5a77 mdbx: refine mdbx_env_set_geometry() internals and 16-bit representation of grow/shrink values.
More for https://github.com/erthink/libmdbx/issues/166.

Change-Id: I7390f954819309ee4a01faf587aee6b5152e44bc
2021-03-14 03:42:52 +03:00
Leonid Yuriev
55620c1d13 mdbx: fix selecting/adjustment values inside mdbx_env_set_geometry() for implicit out-of-range cases.
Fixes https://github.com/erthink/libmdbx/issues/170.

Change-Id: Ibc8754811aa3d9077447220f9fec7a5543e40cc4
2021-03-13 19:55:19 +03:00
Leonid Yuriev
439cccf65f mdbx: minor fix assertion in the prev commit.
One more for https://github.com/erthink/libmdbx/issues/171.

Change-Id: I49be3df948f3dbcc838f3dc307155ac404cfb331
2021-03-13 19:40:18 +03:00
Leonid Yuriev
f7cd08ea48 mdbx: add an explicit/strict check that the environment is open.
More for https://github.com/erthink/libmdbx/issues/171.

Change-Id: Ifbf7f8ba143d19162bd3ed1cf29c21c31b45f0d5
2021-03-13 18:31:45 +03:00
Leonid Yuriev
e43cf081f1 mdbx: fix mdbx_env_info_ex() for a non-open environment case.
Fix the https://github.com/erthink/libmdbx/issues/171.

Change-Id: Iad3d0186ef40dfd40fad1c3ae0dd97f9c1161c16
2021-03-13 17:15:17 +03:00
Leonid Yuriev
a96b6f79c6 mdbx: fix/disallowing implicit subDB deletion via operations on MAIN_DBI.
Change-Id: I3cd786e877f42cef2c0d5556033b2633f8a8ce62
2021-03-13 17:11:35 +03:00
Leonid Yuriev
fd021d793a mdbx: fix MSVC warning.
More for https://github.com/erthink/libmdbx/issues/166

Change-Id: I47a2ec72831c06695e7ef4c52a77039e52a718e2
2021-03-09 12:59:54 +03:00
Leonid Yuriev
cd90f831af mdbx: refine db growth step default.
Change-Id: Ief80441cb578ae37d5d7cee4766e57eaacb4bbde
2021-03-09 12:59:27 +03:00
Leonid Yuriev
8e51a10908 mdbx: packing the 16-bit representations of grow step and shrink threshold values.
Using float point (exponential quantized) representation for internal 16-bit values
of grow step and shrink threshold when huge ones
.
To minimize the impact on compatibility, only the odd values inside the upper half
of the range (i.e. 32769..65533) are used for the new representation.

Resolve https://github.com/erthink/libmdbx/issues/166

Change-Id: I273127c1842deef0d7d8885b55a805b1463556eb
2021-03-09 12:54:48 +03:00
Leonid Yuriev
ec95a50bb6 mdbx: fix not setting the dirty flag for @MAIN when dropping DBI.
This fixes https://github.com/erthink/libmdbx/issues/168

Change-Id: Ida9f11fbcea092af17946b95bfe4ac58b822a80c
2021-03-06 20:40:15 +03:00
Leonid Yuriev
b0d449565d mdbx: shrink dbi table immediately in the mdbx_dbi_close_locked().
Change-Id: Idaa5ec9791b5ffa4305e7f9f7a625fba5f956dd9
2021-03-05 03:20:21 +03:00
Leonid Yuriev
de13d6c823 mdbx: merge branch 'master' into devel.
Change-Id: Icec2e7548923ef7b3e33bf50fc20842938d5eec5
2021-03-04 19:23:09 +03:00
Erk
b2a0279253
Fix compilation on build targets listed below MIPS 2021-03-04 10:33:12 +01:00
Leonid Yuriev
dec11e639a mdbx: fix mdbx_dpl_alloc().
Change-Id: Ia7d4b1866ca3623668edffd56ab83e845f16b2a5
2021-03-03 16:24:32 +03:00
Leonid Yuriev
0cebc50291 mdbx: refine page-rebalance.
Change-Id: Ia94379fa51eb5da1e1ec1a52cc1dd8b67ceb150a
2021-03-03 16:05:52 +03:00
Leonid Yuriev
46dcd6e7ca mdbx: (re)alloc dpl-list at txn start.
Change-Id: Ie35221666f09a189f5513e77d3ecb4056968334f
2021-03-02 03:58:27 +03:00
Leonid Yuriev
c8dccc9bc4 mdbx: limits the initial size of dpl-list to the current db-size.
Change-Id: I5f575fc6168f50786b6f8a82ae020d323530a12e
2021-02-28 01:02:16 +03:00
Leonid Yuriev
72d978ee48 mdbx: weakens checks during set the MDBX_opt_txn_dp_limit to avoid MDBX_EINVAL.
Change-Id: I4852261d0c45b726c60792463ab698538fa447e5
2021-02-28 01:02:16 +03:00
Leonid Yuriev
7fcf11013e mdbx: minor fix likely/unlikely inside mdbx_cursor_del().
Change-Id: I86cfc755eef7371ea96c0feb39bffd3ec5298b71
2021-02-28 01:02:16 +03:00
Leonid Yuriev
3fd739ea2c mdbx: add MDBX_DISABLE_PAGECHECKS build option.
Change-Id: Ia5e2727b74961e7f829f273225c5c1a6cc764b8e
2021-02-07 02:53:54 +03:00
Leonid Yuriev
c89f30e485 mdbx: fix/rework C11 atomics usage to avoid performance regression.
Resolve https://github.com/erthink/libmdbx/issues/160

Change-Id: Ic14ef8c9f1e4fb844952f51e81b58268d7939cfe
2021-02-06 21:16:56 +03:00
Leonid Yuriev
7e7d526ed5 mdbx: minor fix txn_spill().
Change-Id: Ic624681d3a9e262b77f761796aabf0231019db72
2021-02-06 19:34:26 +03:00
Leonid Yuriev
0e8c913c57 mdbx: minor refine node_search().
Change-Id: Ib9aaca3e7853b9986b6d70bc43a88e90d0a46c0c
2021-02-06 19:33:07 +03:00
Leonid Yuriev
892402a5d8 mdbx: add missing unlikely() hints.
Change-Id: I0baae944b9d2a994ad65fbb57591c2cc8d35f0d3
2021-02-06 19:31:04 +03:00
Leonid Yuriev
0cc695e22e mdbx: minor simplify page_get().
Change-Id: I2a548ea008fad29da8382946dff3c7d9bffa1e85
2021-02-06 19:30:05 +03:00
Leonid Yuriev
8133d93678 mdbx: add LIBMDBX_NO_EXPORTS_LEGACY_API build option.
Change-Id: I9d9dcffe63fce843e22132c3829adca57714d818
2021-02-02 00:25:48 +03:00
Leonid Yuriev
38a559b93e mdbx: Crutches for C11-atomics compiler's bugs.
Change-Id: I5a857aa56c831f00c4bc67c95d7aecabc29264da
2021-02-01 20:55:41 +03:00
Leonid Yuriev
25c4df0d3e mdbx: radix sort for large chunks of PNL and DPL.
More for https://github.com/erthink/libmdbx/issues/132

Change-Id: I19b253f78069d4ecd4ec360a12121c78f182fc09
2021-02-01 02:14:13 +03:00
Leonid Yuriev
88bdf4b96f mdbx: avoid branches inside bsearch() loop.
Related for https://github.com/erthink/libmdbx/issues/132

Change-Id: Ia843556cc7052e5081a98f56b43fd80e2d0a40c7
2021-02-01 00:39:52 +03:00
Leonid Yuriev
28bd5d81d2 mdbx: incremental lazy merge sort for dirty-page list.
The main change for https://github.com/erthink/libmdbx/issues/132

Change-Id: I9907f6abfcf77bd40c7a263f5adb5274d5445864
2021-02-01 00:39:19 +03:00
Leonid Yuriev
0620ec2f2e mdbx: merge branch master into the devel.
Change-Id: Iab3a0502577f6557e3f8fccc89df49aee372416e
2021-01-31 23:21:16 +03:00
Leonid Yuriev
077989bfed mdbx: adds pre- and post- gaps to dirty page list to avoid some comparisons and conditional branches.
More for https://github.com/erthink/libmdbx/issues/132

Change-Id: I6562c5ff6c559341bb7bb64222b126f06cc13427
2021-01-31 23:20:49 +03:00