|
|
|
@ -1,10 +1,10 @@ |
|
|
|
|
/** @file lmdb.h
|
|
|
|
|
* @brief Lightning memory-mapped database library |
|
|
|
|
* |
|
|
|
|
* @mainpage Lightning Memory-Mapped Database Manager (MDB) |
|
|
|
|
* @mainpage Lightning Memory-Mapped Database Manager (LMDB) |
|
|
|
|
* |
|
|
|
|
* @section intro_sec Introduction |
|
|
|
|
* MDB is a Btree-based database management library modeled loosely on the |
|
|
|
|
* LMDB is a Btree-based database management library modeled loosely on the |
|
|
|
|
* BerkeleyDB API, but much simplified. The entire database is exposed |
|
|
|
|
* in a memory map, and all data fetches return data directly |
|
|
|
|
* from the mapped memory, so no malloc's or memcpy's occur during |
|
|
|
@ -26,10 +26,10 @@ |
|
|
|
|
* readers, and readers don't block writers. |
|
|
|
|
* |
|
|
|
|
* Unlike other well-known database mechanisms which use either write-ahead |
|
|
|
|
* transaction logs or append-only data writes, MDB requires no maintenance |
|
|
|
|
* transaction logs or append-only data writes, LMDB requires no maintenance |
|
|
|
|
* during operation. Both write-ahead loggers and append-only databases |
|
|
|
|
* require periodic checkpointing and/or compaction of their log or database |
|
|
|
|
* files otherwise they grow without bound. MDB tracks free pages within |
|
|
|
|
* files otherwise they grow without bound. LMDB tracks free pages within |
|
|
|
|
* the database and re-uses them for new write operations, so the database |
|
|
|
|
* size does not grow without bound in normal use. |
|
|
|
|
* |
|
|
|
@ -49,7 +49,7 @@ |
|
|
|
|
* stale locks can block further operation. |
|
|
|
|
* |
|
|
|
|
* Fix: Check for stale readers periodically, using the |
|
|
|
|
* #mdb_reader_check function or the mdb_stat tool. Or just |
|
|
|
|
* #mdb_reader_check function or the \ref mdb_stat_1 "mdb_stat" tool. Or just |
|
|
|
|
* make all programs using the database close it; the lockfile |
|
|
|
|
* is always reset on first open of the environment. |
|
|
|
|
* |
|
|
|
@ -86,7 +86,7 @@ |
|
|
|
|
* |
|
|
|
|
* - Use an MDB_env* in the process which opened it, without fork()ing. |
|
|
|
|
* |
|
|
|
|
* - Do not have open an MDB database twice in the same process at |
|
|
|
|
* - Do not have open an LMDB database twice in the same process at |
|
|
|
|
* the same time. Not even from a plain open() call - close()ing it |
|
|
|
|
* breaks flock() advisory locking. |
|
|
|
|
* |
|
|
|
@ -109,7 +109,7 @@ |
|
|
|
|
* - If you do that anyway, do a periodic check for stale readers. Or |
|
|
|
|
* close the environment once in a while, so the lockfile can get reset. |
|
|
|
|
* |
|
|
|
|
* - Do not use MDB databases on remote filesystems, even between |
|
|
|
|
* - Do not use LMDB databases on remote filesystems, even between |
|
|
|
|
* processes on the same host. This breaks flock() on some OSes, |
|
|
|
|
* possibly memory map sync, and certainly sync between programs |
|
|
|
|
* on different hosts. |
|
|
|
@ -172,7 +172,7 @@ typedef void *mdb_filehandle_t; |
|
|
|
|
typedef int mdb_filehandle_t; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/** @defgroup mdb MDB API
|
|
|
|
|
/** @defgroup mdb LMDB API
|
|
|
|
|
* @{ |
|
|
|
|
* @brief OpenLDAP Lightning Memory-Mapped Database Manager |
|
|
|
|
*/ |
|
|
|
@ -386,7 +386,7 @@ typedef enum MDB_cursor_op { |
|
|
|
|
#define MDB_PANIC (-30795) |
|
|
|
|
/** Environment version mismatch */ |
|
|
|
|
#define MDB_VERSION_MISMATCH (-30794) |
|
|
|
|
/** File is not a valid MDB file */ |
|
|
|
|
/** File is not a valid LMDB file */ |
|
|
|
|
#define MDB_INVALID (-30793) |
|
|
|
|
/** Environment mapsize reached */ |
|
|
|
|
#define MDB_MAP_FULL (-30792) |
|
|
|
@ -436,7 +436,7 @@ typedef struct MDB_envinfo { |
|
|
|
|
unsigned int me_numreaders; /**< max reader slots used in the environment */ |
|
|
|
|
} MDB_envinfo; |
|
|
|
|
|
|
|
|
|
/** @brief Return the mdb library version information.
|
|
|
|
|
/** @brief Return the LMDB library version information.
|
|
|
|
|
* |
|
|
|
|
* @param[out] major if non-NULL, the library major version number is copied here |
|
|
|
|
* @param[out] minor if non-NULL, the library minor version number is copied here |
|
|
|
@ -450,14 +450,14 @@ char *mdb_version(int *major, int *minor, int *patch); |
|
|
|
|
* This function is a superset of the ANSI C X3.159-1989 (ANSI C) strerror(3) |
|
|
|
|
* function. If the error code is greater than or equal to 0, then the string |
|
|
|
|
* returned by the system function strerror(3) is returned. If the error code |
|
|
|
|
* is less than 0, an error string corresponding to the MDB library error is |
|
|
|
|
* returned. See @ref errors for a list of MDB-specific error codes. |
|
|
|
|
* is less than 0, an error string corresponding to the LMDB library error is |
|
|
|
|
* returned. See @ref errors for a list of LMDB-specific error codes. |
|
|
|
|
* @param[in] err The error code |
|
|
|
|
* @retval "error message" The description of the error |
|
|
|
|
*/ |
|
|
|
|
char *mdb_strerror(int err); |
|
|
|
|
|
|
|
|
|
/** @brief Create an MDB environment handle.
|
|
|
|
|
/** @brief Create an LMDB environment handle.
|
|
|
|
|
* |
|
|
|
|
* This function allocates memory for a #MDB_env structure. To release |
|
|
|
|
* the allocated memory and discard the handle, call #mdb_env_close(). |
|
|
|
@ -490,15 +490,15 @@ int mdb_env_create(MDB_env **env); |
|
|
|
|
* how the operating system has allocated memory to shared libraries and other uses. |
|
|
|
|
* The feature is highly experimental. |
|
|
|
|
* <li>#MDB_NOSUBDIR |
|
|
|
|
* By default, MDB creates its environment in a directory whose |
|
|
|
|
* By default, LMDB creates its environment in a directory whose |
|
|
|
|
* pathname is given in \b path, and creates its data and lock files |
|
|
|
|
* under that directory. With this option, \b path is used as-is for |
|
|
|
|
* the database main data file. The database lock file is the \b path |
|
|
|
|
* with "-lock" appended. |
|
|
|
|
* <li>#MDB_RDONLY |
|
|
|
|
* Open the environment in read-only mode. No write operations will be |
|
|
|
|
* allowed. MDB will still modify the lock file - except on read-only |
|
|
|
|
* filesystems, where MDB does not use locks. |
|
|
|
|
* allowed. LMDB will still modify the lock file - except on read-only |
|
|
|
|
* filesystems, where LMDB does not use locks. |
|
|
|
|
* <li>#MDB_WRITEMAP |
|
|
|
|
* Use a writeable memory map unless MDB_RDONLY is set. This is faster |
|
|
|
|
* and uses fewer mallocs, but loses protection from application bugs |
|
|
|
@ -542,7 +542,7 @@ int mdb_env_create(MDB_env **env); |
|
|
|
|
* the user synchronizes its use. Applications that multiplex many |
|
|
|
|
* user threads over individual OS threads need this option. Such an |
|
|
|
|
* application must also serialize the write transactions in an OS |
|
|
|
|
* thread, since MDB's write locking is unaware of the user threads. |
|
|
|
|
* thread, since LMDB's write locking is unaware of the user threads. |
|
|
|
|
* <li>#MDB_NOLOCK |
|
|
|
|
* Don't do any locking. If concurrent access is anticipated, the |
|
|
|
|
* caller must manage all concurrency itself. For proper operation |
|
|
|
@ -581,7 +581,7 @@ int mdb_env_create(MDB_env **env); |
|
|
|
|
* @return A non-zero error value on failure and 0 on success. Some possible |
|
|
|
|
* errors are: |
|
|
|
|
* <ul> |
|
|
|
|
* <li>#MDB_VERSION_MISMATCH - the version of the MDB library doesn't match the |
|
|
|
|
* <li>#MDB_VERSION_MISMATCH - the version of the LMDB library doesn't match the |
|
|
|
|
* version that created the database environment. |
|
|
|
|
* <li>#MDB_INVALID - the environment file headers are corrupted. |
|
|
|
|
* <li>ENOENT - the directory specified by the path parameter doesn't exist. |
|
|
|
@ -591,7 +591,7 @@ int mdb_env_create(MDB_env **env); |
|
|
|
|
*/ |
|
|
|
|
int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode); |
|
|
|
|
|
|
|
|
|
/** @brief Copy an MDB environment to the specified path.
|
|
|
|
|
/** @brief Copy an LMDB environment to the specified path.
|
|
|
|
|
* |
|
|
|
|
* This function may be used to make a backup of an existing environment. |
|
|
|
|
* No lockfile is created, since it gets recreated at need. |
|
|
|
@ -607,7 +607,7 @@ int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t |
|
|
|
|
*/ |
|
|
|
|
int mdb_env_copy(MDB_env *env, const char *path); |
|
|
|
|
|
|
|
|
|
/** @brief Copy an MDB environment to the specified file descriptor.
|
|
|
|
|
/** @brief Copy an LMDB environment to the specified file descriptor.
|
|
|
|
|
* |
|
|
|
|
* This function may be used to make a backup of an existing environment. |
|
|
|
|
* No lockfile is created, since it gets recreated at need. |
|
|
|
@ -622,7 +622,7 @@ int mdb_env_copy(MDB_env *env, const char *path); |
|
|
|
|
*/ |
|
|
|
|
int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd); |
|
|
|
|
|
|
|
|
|
/** @brief Return statistics about the MDB environment.
|
|
|
|
|
/** @brief Return statistics about the LMDB environment.
|
|
|
|
|
* |
|
|
|
|
* @param[in] env An environment handle returned by #mdb_env_create() |
|
|
|
|
* @param[out] stat The address of an #MDB_stat structure |
|
|
|
@ -630,7 +630,7 @@ int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd); |
|
|
|
|
*/ |
|
|
|
|
int mdb_env_stat(MDB_env *env, MDB_stat *stat); |
|
|
|
|
|
|
|
|
|
/** @brief Return information about the MDB environment.
|
|
|
|
|
/** @brief Return information about the LMDB environment.
|
|
|
|
|
* |
|
|
|
|
* @param[in] env An environment handle returned by #mdb_env_create() |
|
|
|
|
* @param[out] stat The address of an #MDB_envinfo structure |
|
|
|
@ -641,7 +641,7 @@ int mdb_env_info(MDB_env *env, MDB_envinfo *stat); |
|
|
|
|
/** @brief Flush the data buffers to disk.
|
|
|
|
|
* |
|
|
|
|
* Data is always written to disk when #mdb_txn_commit() is called, |
|
|
|
|
* but the operating system may keep it buffered. MDB always flushes |
|
|
|
|
* but the operating system may keep it buffered. LMDB always flushes |
|
|
|
|
* the OS buffers upon commit as well, unless the environment was |
|
|
|
|
* opened with #MDB_NOSYNC or in part #MDB_NOMETASYNC. |
|
|
|
|
* @param[in] env An environment handle returned by #mdb_env_create() |
|
|
|
@ -824,7 +824,7 @@ int mdb_env_set_userctx(MDB_env *env, void *ctx); |
|
|
|
|
*/ |
|
|
|
|
void *mdb_env_get_userctx(MDB_env *env); |
|
|
|
|
|
|
|
|
|
/** @brief A callback function for most MDB assert() failures,
|
|
|
|
|
/** @brief A callback function for most LMDB assert() failures,
|
|
|
|
|
* called before printing the message and aborting. |
|
|
|
|
* |
|
|
|
|
* @param[in] env An environment handle returned by #mdb_env_create(). |
|
|
|
@ -1206,7 +1206,7 @@ int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); |
|
|
|
|
* reserved space, which the caller can fill in later - before |
|
|
|
|
* the next update operation or the transaction ends. This saves |
|
|
|
|
* an extra memcpy if the data is being generated later. |
|
|
|
|
* MDB does nothing else with this memory, the caller is expected |
|
|
|
|
* LMDB does nothing else with this memory, the caller is expected |
|
|
|
|
* to modify all of the space requested. |
|
|
|
|
* <li>#MDB_APPEND - append the given key/data pair to the end of the |
|
|
|
|
* database. No key comparisons are performed. This option allows |
|
|
|
@ -1478,4 +1478,12 @@ int mdb_reader_check(MDB_env *env, int *dead); |
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
/** @page tools LMDB Command Line Tools
|
|
|
|
|
The following describes the command line tools that are available for LMDB. |
|
|
|
|
\li \ref mdb_copy_1 |
|
|
|
|
\li \ref mdb_dump_1 |
|
|
|
|
\li \ref mdb_load_1 |
|
|
|
|
\li \ref mdb_stat_1 |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#endif /* _LMDB_H_ */ |
|
|
|
|