libmdbx (2021-01-29 ... 2021-06-08)
Send, то бишь все структуры внутри неё можно двигать между потоками), или запустить прибитой к треду от начала и до конца (но можно даже если `!Send`). Динамически прикрепить и открепить нельзя, потому что это риск UB из безопасного кода.libgcc_s.so may contain long division functions, support for C11 atomics, etc...libgcc_s.so.
mdbx_env_set_maxreaders. Не знаю проблема это или нет.
devel на github завершен ряд доработок, см. https://github.com/erthink/libmdbx/blob/devel/ChangeLog.md./test/long_stochastic.sh находясь в корне git repo.git is necessary to avoid human error when generating version information.mdbx_dbi_stat(FREE_DBI)?
space_dirty, space_retired) сразу перед коммитом.
mdbx_chk и/или mdbx_stat;mdbx_stat -r.
retained нули, то значит читатели не мешают переработки мусора.
mdbx_env_set_hsr(), см https://erthink.github.io/libmdbx/group__c__err.html#gaedc09dd7e0634163be8aafdf00d7db77.MDBX_COALESCE в вашем случае особо не влияет, поскольку при поиске места движок будет читать и объединять записи из GC пока не найдет последовательности достаточной длинны, т.е. MDBX_COALESCE как-бы включается вынужденно.
MDBX_opt_rp_augment_limit, см https://erthink.github.io/libmdbx/group__c__api.html#gga671855605968c3b1f89a72e2d7b71eb3a9fe64bcad43752eac6596cbb49a2be2d.
/dev/shm/.MDBX_MAP_FULL = -30792 с хвостом в консоли:db_value.iov_len = 15149103, т.е. (15149103 + 4096 - 1) / 4096 = 3699 страниц../mdbx_chk -cvvvv /dev/shm/, среди прочего вижу:mdbx_env_set_geometry(env, -1, 0, cache_size * 2, -1, 0, 65536) вместо mdbx_env_set_mapsize().MDBX_APPEND.
MDBX_NODUPDATA) - to drop sub-db - how it works now? (I don't understand from source code).dupsort sub-tree for the key - this is done by current API.
abc_*, хочу выбрать все ключи со значениями, по этой бинарной маске?
MDBX_APPEND и MDBX_APPENDDUP.mdbx_copy -c или mdbx_env_copy()), а также сделав дамп-восстановление утилитами mdbx_dump + mdbx_load).
MDBX_ENABLE_REFUND=0, по крайней мере в production.mdb_stat -aef и mdbx_stat -aef./usr/bin/time -v (лучше не путать с time встроенной в bash).madvise(), сейчас я добавлю соответствующую опцию сборки.getrusage() (за вычетом не поддерживаемых на Linux, см. man getrusage), а также основные параметры "геометрии БД": backed, allocated, used, gc (mdbx_stat -ef) и соответствующие им для LMDB (mdb_stat -ef, но там меньше информации и я не помню подробностей).MDBX_RDONLY?
-a).txSenders.MADVISE
mdbx_cursor_bind().
iovec through mdbx_get also should not be used after dbi drop?
mdbx_is_dirty() = https://erthink.github.io/libmdbx/group__c__statinfo.html#ga32a2b4d341edf438c7d050fb911bfce9
mdbx_get, then run mdbx_del for the same key? will an iovec remain valid?
Env
^
|
Txn
^
|
Database <-------\
^ |
| |
Cursor Values (&[u8])
struct data_preserver внутри template<> class buffer в https://github.com/erthink/libmdbx/blob/master/mdbx.h%2B%2B#L828 mdbx_is_dirty() внутри libfpta, например https://github.com/erthink/libfpta/blob/master/src/data.cxx#L690-L694
Database::get отдаёт слайс байтов, который "захватывает" ссылку на экземпляр DatabaseDatabase::del нужно взять эксклюзивную ссылку на Database - это невозможно пока живы любые ссылки на этот же экземпляр
Database::del/put, который захватит только dbi, или мне нужно делать Transaction::del/put и блокировать всю write-транзакцию
@MAIN (pre-defined DBI == 1) и прочитать эту запись;@MAIN, что может вызвать изменение страницы с данными добавленными и прочитанными на первом шаге.
world может "поломаться".
@MAIN (установка актуальных ссылок на nested b+tree для subDB) происходит только при коммите транзакции.
Database (`mdbx_dbi_open`) и сделать get/put/del в произвольном порядкеget проверять is_dirty, и если да - копировать данные
close вместо drop.
MDBX_RESERVE, в нём будут случайные данные?
mdbx_cursor_get вернул ENODATA, хотя в доке этой ошибки нет
struct MyTxnChart либо не возможно, либо только в виде struct MyTxnChart { array[10000]: Database }.
mdbx_env_info_ex on an env that was created successfully immediately before by using mdbx_env_create crashes the program?
5118 MDBX_meta *head = mdbx_meta_recent(mode, env, m0, m1);
operate_parameters contains more options that could defined by flags.
mdbx_env_create() create just a "handle" without binding to the some DB.mdbx_env_info().-g option should be used, and symbols will be inside an executables by default.
O_APPEND flag.MDBX_EXCLUSIVE). При этом с БД сможет работать только один процесс с любым кол-вом тредов внутри. mdbx_dbi_stat(), https://erthink.github.io/libmdbx/group__c__statinfo.html#ga7582460beceb078cec8b515a5280d568.dupsort feature is when building (secondary or non-clustered) indexes for low-cardinality data.DUPFIXED will save a few bytes per item, since length of data is fixed and will not be stored internally.
mdbx_cursor_count() and mdbx_get_ex() may be useful, since return number of duplicates/multivalues.
mdbx_env_pgwalk is some low-level primitive - but it's not enough for replication.
MDBX_WRITEMAP flag - then "writes" are actually "reads+copy in RAM" - so totally same rules of page size, page eviction, ...
What’s wrong with mdbx_env_set_syncperiod method?
mdbx_cursor_get ops set data? which of those set not just data, but key as well?
MDBX_GET_BOTH key и data являются входными аргументами.MDBX_GET_CURRENT и операции из второго пункта для которых прописан возврат результатов в key и/или data.SafeNoSync is 250 times slower than Durable (on big amount of small write transactions, on macbook). So, i don't know.
MDBX_LIFORECLAIM option.MDBX_LIFORECLAIM.mdbx_env_set_syncperiod - this option must be used with MDBX_SAFE_NOSYNC only or with MDBX_NOMETASYNC+MDBX_SAFE_NOSYNC?
MDBX_LOCKING не смогут работать с одной БД одновременно, а только по-очередно.
mdbx_copy will make a consistently copy of the MVCC snapshot.mdbx_env_set_syncperiod does. "Doesn't write to disk at tx.Commit, but write to disk periodically".strace tool).DUPSORT - stands for Sorted Duplicates
root, err := tx.OpenDBI(0)
if err != nil {
return nil, err
}
c, err := tx.OpenCursor(root)
if err != nil {
return nil, err
}
for k, _, _ := c.Get(nil, nil, mdbx.First); k != nil; k, _, _ = c.Get(nil, nil, mdbx.Next) {
tableNames = append(tableNames, string(k))
}
return tableNames, nil
mmap() the entire DB into the RAM.DB_SIZE / 2 / ITEM_SIZE and DB_SIZE / 4 / ITEM_SIZE.
libmdbx, since (theoretically) this sanctions do not apply to individuals, and I personally (yet) do not enter any sanctions lists.devel branch.devel branch for now) in own use cases.
mdb.master3).devel branch and will be ready soon.MDBX_WRITEMAP mode;master) для более плотного заполнения страниц, показывают улучшение в большинстве сценариев использования. Как минимум пока где-либо не видно ухудшения. Но для ledgerwatch/turbo-geth они не дали эффекта:MDBX_APPEND и/или MDBX_APPEND_DUP режимах.MADV_RANDOM is enabled for the entire DB and this was enough to fix "the trouble".
MDBX_WRITEMAP is very-very-much useful for TG usecase (1Tb DB, large transactions,16 Gb RAM).devel branch, but for now you need to manually increase the MDBX_opt_txn_dp_limit to the DB size.devel branch) a dirty page(s) will ousted to DB file by the OS kernel with LRU policy, without requiring any further actions until a such page(s) would be read or changes/altered again.
make dist).
mdbx_copy utility and the mdbx_env_copy(), mdbx_env_copy2fd() function(s).devel branch.mdbx_copy utility, the mdb_new_copy() and mdx_copy2fd() functions.
mdbx.h completely once.
mdbx_new_stat() and `mdbx_new_info() values, including pgop_stat, which will reflect the changes made.proc_start.split and other stats.pgop_stat.merge and other stats.geo.shrink_threshold.
mdbx_env_stat_ex() and struct MDBX_stat.mdbx_dbi_stat(), mdbx_env_stat_ex(), mdbx_env_info_ex().mdbx_env_stat_ex returns stats of Main DBI instead of stats of whole db. and lmdb does the same. make V=1 for verbose.make options to listing available build options.make help to listing available targets.MDBX_opt_txn_dp_limit 2 times. And see if it helped or not.
mdbx_chk -V./usr/bin/time util and show it's output.
LDFLAGS need use on Win to link with mdbx?
LDFLAGS but just add mdbx (or mdbx-static) to you exe/lib CMake's targets.LDFLAGS which depends from toolchain you are using.
__MAC_OS_X_VERSION_MAIN_REQUIRED in the C++ library for iOS, support for ::std::filesystem::path is implemented ?
fprintf() this value for an app built for iOS 13.
_LIBCPP_AVAILABILITY_FILESYSTEM_PUSH# define _LIBCPP_AVAILABILITY_FILESYSTEM_PUSH \
_Pragma("clang attribute push(__attribute__((availability(macosx,strict,introduced=10.15))), apply_to=any(function,record))") \
_Pragma("clang attribute push(__attribute__((availability(ios,strict,introduced=13.0))), apply_to=any(function,record))") \
_Pragma("clang attribute push(__attribute__((availability(tvos,strict,introduced=13.0))), apply_to=any(function,record))") \
_Pragma("clang attribute push(__attribute__((availability(watchos,strict,introduced=6.0))), apply_to=any(function,record))")
__IPHONE_OS_VERSION_MIN_REQUIRED 130100
__MAC_OS_X_VERSION_MIN_REQUIRED is undefined
#if defined(DOXYGEN) || \
(defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L && \
((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500) || \
(defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 130100)))
__TVOS_VERSION_MIN_REQUIRED and __WATCHOS_VERSION_MIN_REQUIRED ?
acquire-lock
read-write copy DB
mv new old
release-lock
mdbx_env_copy() and mdbx_env_copy2fd() are allows to copy the database with compactification/defragmentatioin.
mdbx_cursor_open на одном MDBX_txn из нескольких потоков одновременно?
make test ломается если задать =5 через MDBX_OPTIONS ?
make check, а уже потом остальное.dispatch_semaphore_t - это внутри-процессный семафор, т.е. для синхронизации потоков внутри _одного_ процесса.sem_t не годятся.
MDBX_env, которая позволит понять нужно ли делать спецпоток или нетMDBX_TXN_CHECKOWNER?
MDBX_TXN_CHECKOWNER - это опция сборки, а флажок будет делать тоже самое (отключать контроль), но не везде (get/put будет без контроля, а commit/abort с контролем).
1950bytes - will mdbx able place 2 such records on 1 page?