Cargo Features
[dependencies]
heed = { version = "0.21.0", default-features = false, features = ["serde", "read-txn-no-tls", "serde-bincode", "serde-json", "serde-rmp", "preserve_order", "arbitrary_precision", "raw_value", "unbounded_depth", "posix-sem", "mdb_idl_logn_8", "mdb_idl_logn_9", "mdb_idl_logn_10", "mdb_idl_logn_11", "mdb_idl_logn_12", "mdb_idl_logn_13", "mdb_idl_logn_14", "mdb_idl_logn_15", "mdb_idl_logn_16", "longer-keys"] }
- default = serde, serde-bincode, serde-json
-
The
serde
feature makes some types serializable, like theEnvOpenOptions
struct. - serde default
- read-txn-no-tls
-
The #MDB_NOTLS flag is automatically set on Env opening,
RoTxn and RoCursors implements the Send trait. This allows the user to move RoTxns and RoCursors between threads as read transactions will no more use thread local storage and will tie reader locktable slots to #MDB_txn objects instead of to threads.
According to the LMDB documentation, when this feature is not enabled:
A thread can only use one transaction at a time, plus any child transactions. Each transaction belongs to one thread. [...]
The #MDB_NOTLS flag changes this for read-only transactions.
And a #MDB_BAD_RSLOT error will be thrown when multiple read transactions exists on the same thread - serde-bincode default
-
Enable the serde en/decoders for bincode, serde_json, or rmp_serde
Enables serde-bincode of heed-types
- serde-json default
-
Enables serde-json of heed-types
- serde-rmp
-
Enables serde-rmp of heed-types
- preserve_order
-
serde_json features
Enables preserve_order of heed-types
- arbitrary_precision
-
Enables arbitrary_precision of heed-types
- raw_value
-
Enables raw_value of heed-types
- unbounded_depth
-
Enables unbounded_depth of heed-types
- posix-sem
-
Whether to tell LMDB to use POSIX semaphores during compilation (instead of the default, which are System V semaphores). POSIX semaphores are required for Apple's App Sandbox on iOS & macOS, and are possibly faster and more appropriate for single-process use. There are tradeoffs for both POSIX and SysV semaphores; which you should look into before enabling this feature. Also, see here: https://github.com/LMDB/lmdb/blob/3947014aed7ffe39a79991fa7fb5b234da47ad1a/libraries/liblmdb/lmdb.h#L46-L69
Enables posix-sem of lmdb-master-sys
- mdb_idl_logn_8
-
These features configure the MDB_IDL_LOGN macro, which determines the size of the free and dirty page lists (and thus the amount of memory allocated when opening an LMDB environment in read-write mode).
Each feature defines MDB_IDL_LOGN as the value in the name of the feature. That means these features are mutually exclusive, and you must not specify more than one at the same time (or the crate will fail to compile).
For more information on the motivation for these features (and their effect), see https://github.com/mozilla/lmdb/pull/2.
Enables mdb_idl_logn_8 of lmdb-master-sys
- mdb_idl_logn_9
-
Enables mdb_idl_logn_9 of lmdb-master-sys
- mdb_idl_logn_10
-
Enables mdb_idl_logn_10 of lmdb-master-sys
- mdb_idl_logn_11
-
Enables mdb_idl_logn_11 of lmdb-master-sys
- mdb_idl_logn_12
-
Enables mdb_idl_logn_12 of lmdb-master-sys
- mdb_idl_logn_13
-
Enables mdb_idl_logn_13 of lmdb-master-sys
- mdb_idl_logn_14
-
Enables mdb_idl_logn_14 of lmdb-master-sys
- mdb_idl_logn_15
-
Enables mdb_idl_logn_15 of lmdb-master-sys
- mdb_idl_logn_16
-
Enables mdb_idl_logn_16 of lmdb-master-sys
- longer-keys
-
Setting this enables you to use keys longer than 511 bytes. The exact limit is computed by LMDB at compile time. You can find the exact value by calling Env::max_key_size(). This value varies by architecture.
Example max key sizes:
- Apple M1 (ARM64): 8126 bytes
- Apple Intel (AMD64): 1982 bytes
- Linux Intel (AMD64): 1982 bytes
Setting this also enables you to use values larger than 511 bytes when using a Database with the DatabaseFlags::DUP_SORT flag.
This builds LMDB with the -DMDB_MAXKEYSIZE=0 option.
Note: If you are moving database files between architectures then your longest stored key must fit within the smallest limit of all architectures used. For example, if you are moving databases between Apple M1 and Apple Intel computers then you need to keep your keys within the smaller 1982 byte limit.Enables longer-keys of lmdb-master-sys