Top Description Fields Constructors Methods
org.lwjgl.util.lmdb

public Class LMDB

extends Object
Class Inheritance
Imports
javax.annotation.*, java.nio.*, org.lwjgl.*, org.lwjgl.system.*

Contains bindings to LMDB, the Symas Lightning Memory-Mapped Database.

Getting Started

LMDB is compact, fast, powerful, and robust and implements a simplified variant of the BerkeleyDB (BDB) API.

Everything starts with an environment, created by env_create. Once created, this environment must also be opened with env_open. env_open gets passed a name which is interpreted as a directory path. Note that this directory must exist already, it is not created for you. Within that directory, a lock file and a storage file will be generated. If you don't want to use a directory, you can pass the NOSUBDIR option, in which case the path you provided is used directly as the data file, and another file with a "-lock" suffix added will be used for the lock file.

Once the environment is open, a transaction can be created within it using txn_begin. Transactions may be read-write or read-only, and read-write transactions may be nested. A transaction must only be used by one thread at a time. Transactions are always required, even for read-only access. The transaction provides a consistent view of the data.

Once a transaction has been created, a database can be opened within it using dbi_open. If only one database will ever be used in the environment, a NULL can be passed as the database name. For named databases, the CREATE flag must be used to create the database if it doesn't already exist. Also, env_set_maxdbs must be called after env_create and before env_open to set the maximum number of named databases you want to support.

Note

a single transaction can open multiple databases. Generally databases should only be opened once, by the first transaction in the process. After the first transaction completes, the database handles can freely be used by all subsequent transactions.

Within a transaction, get and put can store single key/value pairs if that is all you need to do (but see Cursors below if you want to do more).

A key/value pair is expressed as two MDBVal structures. This struct has two fields, mv_size and mv_data. The data is a void pointer to an array of mv_size bytes.

Because LMDB is very efficient (and usually zero-copy), the data returned in an MDBVal structure may be memory-mapped straight from disk. In other words look but do not touch (or free() for that matter). Once a transaction is closed, the values can no longer be used, so make a copy if you need to keep them after that.

Cursors

To do more powerful things, we must use a cursor.

Within the transaction, a cursor can be created with cursor_open. With this cursor we can store/retrieve/delete (multiple) values using cursor_get, cursor_put, and cursor_del.

cursor_get positions itself depending on the cursor operation requested, and for some operations, on the supplied key. For example, to list all key/value pairs in a database, use operation FIRST for the first call to cursor_get, and NEXT on subsequent calls, until the end is hit.

To retrieve all keys starting from a specified key value, use SET.

When using cursor_put, either the function will position the cursor for you based on the key, or you can use operation CURRENT to use the current position of the cursor. Note that key must then match the current position's key.

Summarizing the Opening

So we have a cursor in a transaction which opened a database in an environment which is opened from a filesystem after it was separately created.

Or, we create an environment, open it from a filesystem, create a transaction within it, open a database within that transaction, and create a cursor within all of the above.

Threads and Processes

LMDB uses POSIX locks on files, and these locks have issues if one process opens a file multiple times. Because of this, do not env_open a file multiple times from a single process. Instead, share the LMDB environment that has opened the file across all threads. Otherwise, if a single process opens the same environment multiple times, closing it once will remove all the locks held on it, and the other instances will be vulnerable to corruption from other processes.

Also note that a transaction is tied to one thread by default using Thread Local Storage. If you want to pass read-only transactions across threads, you can use the NOTLS option on the environment.

Transactions, Rollbacks, etc.

To actually get anything done, a transaction must be committed using txn_commit. Alternatively, all of a transaction's operations can be discarded using txn_abort. In a read-only transaction, any cursors will not automatically be freed. In a read-write transaction, all cursors will be freed and must not be used again.

For read-only transactions, obviously there is nothing to commit to storage. The transaction still must eventually be aborted to close any database handle(s) opened in it, or committed to keep the database handles around for reuse in new transactions.

In addition, as long as a transaction is open, a consistent view of the database is kept alive, which requires storage. A read-only transaction that no longer requires this consistent view should be terminated (committed or aborted) when the view is no longer needed (but see below for an optimization).

There can be multiple simultaneously active read-only transactions but only one that can write. Once a single read-write transaction is opened, all further attempts to begin one will block until the first one is committed or aborted. This has no effect on read-only transactions, however, and they may continue to be opened at any time.

Duplicate Keys

get and put respectively have no and only some support for multiple key/value pairs with identical keys. If there are multiple values for a key, get will only return the first value.

When multiple values for one key are required, pass the DUPSORT flag to dbi_open. In an DUPSORT database, by default put will not replace the value for a key if the key existed already. Instead it will add the new value to the key. In addition, del will pay attention to the value field too, allowing for specific values of a key to be deleted.

Finally, additional cursor operations become available for traversing through and retrieving duplicate values.

Some Optimization

If you frequently begin and abort read-only transactions, as an optimization, it is possible to only reset and renew a transaction.

txn_reset releases any old copies of data kept around for a read-only transaction. To reuse this reset transaction, call txn_renew on it. Any cursors in this transaction must also be renewed using cursor_renew.

Note that txn_reset is similar to txn_abort and will close any databases you opened within the transaction.

To permanently free a transaction, reset or not, use txn_abort.

Cleaning Up

For read-only transactions, any cursors created within it must be closed using cursor_close.

It is very rarely necessary to close a database handle, and in general they should just be left open.

Field Summary

Modifier and TypeField and Description
public static final int
MDB_APPEND

Write flags.

public static final int
MDB_APPENDDUP

Write flags.

public static final int
MDB_BAD_DBI

Return codes.

public static final int
MDB_BAD_RSLOT

Return codes.

public static final int
MDB_BAD_TXN

Return codes.

public static final int
MDB_BAD_VALSIZE

Return codes.

public static final int
MDB_CORRUPTED

Return codes.

public static final int
MDB_CP_COMPACT

Copy flags.

public static final int
MDB_CREATE

Database flags.

public static final int
MDB_CURRENT

Write flags.

public static final int
MDB_CURSOR_FULL

Return codes.

public static final int
MDB_DBS_FULL

Return codes.

public static final int
MDB_DUPFIXED

Database flags.

public static final int
MDB_DUPSORT

Database flags.

public static final int
MDB_FIRST

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_FIRST_DUP

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_FIXEDMAP

Environment flags.

public static final int
MDB_GET_BOTH

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_GET_BOTH_RANGE

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_GET_CURRENT

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_GET_MULTIPLE

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_INCOMPATIBLE

Return codes.

public static final int
MDB_INTEGERDUP

Database flags.

public static final int
MDB_INTEGERKEY

Database flags.

public static final int
MDB_INVALID

Return codes.

public static final int
MDB_KEYEXIST

Return codes.

public static final int
MDB_LAST

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_LAST_DUP

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_LAST_ERRCODE

Return codes.

public static final int
MDB_MAP_FULL

Return codes.

public static final int
MDB_MAP_RESIZED

Return codes.

public static final int
MDB_MAPASYNC

Environment flags.

public static final int
MDB_MULTIPLE

Write flags.

public static final int
MDB_NEXT

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_NEXT_DUP

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_NEXT_MULTIPLE

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_NEXT_NODUP

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_NODUPDATA

Write flags.

public static final int
MDB_NOLOCK

Environment flags.

public static final int
MDB_NOMEMINIT

Environment flags.

public static final int
MDB_NOMETASYNC

Environment flags.

public static final int
MDB_NOOVERWRITE

Write flags.

public static final int
MDB_NORDAHEAD

Environment flags.

public static final int
MDB_NOSUBDIR

Environment flags.

public static final int
MDB_NOSYNC

Environment flags.

public static final int
MDB_NOTFOUND

Return codes.

public static final int
MDB_NOTLS

Environment flags.

public static final int
MDB_PAGE_FULL

Return codes.

public static final int
MDB_PAGE_NOTFOUND

Return codes.

public static final int
MDB_PANIC

Return codes.

public static final int
MDB_PREV

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_PREV_DUP

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_PREV_MULTIPLE

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_PREV_NODUP

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_RDONLY

Environment flags.

public static final int
MDB_READERS_FULL

Return codes.

public static final int
MDB_RESERVE

Write flags.

public static final int
MDB_REVERSEDUP

Database flags.

public static final int
MDB_REVERSEKEY

Database flags.

public static final int
MDB_SET

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_SET_KEY

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_SET_RANGE

MDB_cursor_op Enum values:

  • FIRST - Position at first key/data item.
  • FIRST_DUP - Position at first data item of current key. Only for DUPSORT.
  • GET_BOTH - Position at key/data pair. Only for DUPSORT.
  • GET_BOTH_RANGE - position at key, nearest data. Only for DUPSORT.
  • GET_CURRENT - Return key/data at current cursor position.
  • GET_MULTIPLE - Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • LAST - Position at last key/data item.
  • LAST_DUP - Position at last data item of current key. Only for DUPSORT.
  • NEXT - Position at next data item.
  • NEXT_DUP - Position at next data item of current key. Only for DUPSORT.
  • NEXT_MULTIPLE - Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for NEXT_MULTIPLE. Only for DUPFIXED.
  • NEXT_NODUP - Position at first data item of next key.
  • PREV - Position at previous data item.
  • PREV_DUP - Position at previous data item of current key. Only for DUPSORT.
  • PREV_NODUP - Position at last data item of previous key.
  • SET - Position at specified key.
  • SET_KEY - Position at specified key, return key + data.
  • SET_RANGE - Position at first key greater than or equal to specified key.
  • PREV_MULTIPLE - Position at previous page and return up to a page of duplicate data items. Only for DUPFIXED.
public static final int
MDB_SUCCESS

Return codes.

public static final int
MDB_TLS_FULL

Return codes.

public static final int
MDB_TXN_FULL

Return codes.

public static final String
MDB_VERSION_DATE

The release date of this library version.

public static final int
MDB_VERSION_FULL

The full library version as a single integer.

public static final int
MDB_VERSION_MAJOR

Library major version.

public static final int
MDB_VERSION_MINOR

Library minor version.

public static final int
MDB_VERSION_MISMATCH

Return codes.

public static final int
MDB_VERSION_PATCH

Library patch version.

public static final String
MDB_VERSION_STRING

The full library version as a string.

public static final int
MDB_WRITEMAP

Environment flags.

Constructor Summary

AccessConstructor and Description
protected
LMDB()

Method Summary

Modifier and TypeMethod and Description
public static int

Returns:

< 0 if a < b, 0 if a == b, > 0 if a > b
mdb_cmp
(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBVal
the first item to compare
a
,
MDBVal
the second item to compare
b
)

Compares two data items according to a particular database.

public static void
mdb_cursor_close(long
a cursor handle returned by cursor_open
cursor
)

Closes a cursor handle.

public static int
mdb_cursor_count(long
a cursor handle returned by cursor_open
cursor
,
PointerBuffer
address where the count will be stored
countp
)

Returns count of duplicates for current key.

public static int
mdb_cursor_dbi(long
a cursor handle returned by cursor_open
cursor
)

Return the cursor's database handle.

public static int
mdb_cursor_del(long
a cursor handle returned by cursor_open
cursor
,
int
options for this operation. This parameter must be set to 0 or one of the values described here.
  • NODUPDATA - delete all of the data items for the current key. This flag may only be specified if the database was opened with DUPSORT.
flags
)

Deletes current key/data pair.

public static int
mdb_cursor_get(long
a cursor handle returned by cursor_open
cursor
,
MDBVal
the key for a retrieved item
key
,
MDBVal
the data of a retrieved item
data
,
int op)

Retrieves by cursor.

public static int
mdb_cursor_open(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
PointerBuffer
address where the new MDB_cursor handle will be stored
cursor
)

Creates a cursor handle.

public static int
mdb_cursor_put(long
a cursor handle returned by cursor_open
cursor
,
MDBVal
the key operated on
key
,
MDBVal
the data operated on
data
,
int
options for this operation. This parameter must be set to 0 or one of the values described here.
  • CURRENT - replace the item at the current cursor position. The key parameter must still be provided, and must match it. If using sorted duplicates (DUPSORT) the data item must still sort into the same place. This is intended to be used when the new data is the same size as the old. Otherwise it will simply perform a delete of the old record followed by an insert.
  • NODUPDATA - enter the new key/data pair only if it does not already appear in the database. This flag may only be specified if the database was opened with DUPSORT. The function will return KEYEXIST if the key/data pair already appears in the database.
  • NOOVERWRITE - enter the new key/data pair only if the key does not already appear in the database. The function will return KEYEXIST if the key already appears in the database, even if the database supports duplicates (DUPSORT).
  • RESERVE - reserve space for data of the given size, but don't copy the given data. Instead, return a pointer to the 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. This flag must not be specified if the database was opened with DUPSORT.
  • APPEND - append the given key/data pair to the end of the database. No key comparisons are performed. This option allows fast bulk loading when keys are already known to be in the correct order. Loading unsorted keys with this flag will cause a KEYEXIST error.
  • APPENDDUP - as above, but for sorted dup data.
  • MULTIPLE - store multiple contiguous data elements in a single request. This flag may only be specified if the database was opened with DUPFIXED. The data argument must be an array of two MDBVal. The mv_size of the first MDBVal must be the size of a single data element. The mv_data of the first MDBVal must point to the beginning of the array of contiguous data elements. The mv_size of the second MDBVal must be the count of the number of data elements to store. On return this field will be set to the count of the number of elements actually written. The mv_data of the second MDBVal is unused.
flags
)

Stores by cursor.

public static int
mdb_cursor_renew(long
a transaction handle returned by txn_begin.
txn
,
long
a cursor handle returned by cursor_open
cursor
)

Renews a cursor handle.

public static long
mdb_cursor_txn(long
a cursor handle returned by cursor_open
cursor
)

Returns the cursor's transaction handle.

public static void
mdb_dbi_close(long
an environment handle returned by env_create
env
,
int
a database handle returned by dbi_open
dbi
)

Closes a database handle.

public static int
mdb_dbi_flags(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
IntBuffer
address where the flags will be returned
flags
)

Retrieve the DB flags for a database handle.

public static int
mdb_dbi_flags(long txn, int dbi, int[] flags)

Array version of: dbi_flags

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
mdb_dbi_open
(long
a transaction handle returned by txn_begin.
txn
,
ByteBuffer
the name of the database to open. If only a single database is needed in the environment, this value may be NULL.
name
,
int
special options for this database. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
  • REVERSEKEY

    Keys are strings to be compared in reverse order, from the end of the strings to the beginning. By default, Keys are treated as strings and compared from beginning to end.

  • DUPSORT

    Duplicate keys may be used in the database. (Or, from another perspective, keys may have multiple data items, stored in sorted order.) By default keys must be unique and may have only a single data item.

  • INTEGERKEY

    Keys are binary integers in native byte order, either unsigned int or size_t, and will be sorted as such. The keys must all be of the same size.

  • DUPFIXED

    This flag may only be used in combination with DUPSORT. This option tells the library that the data items for this database are all the same size, which allows further optimizations in storage and retrieval. When all data items are the same size, the GET_MULTIPLE, NEXT_MULTIPLE and PREV_MULTIPLE cursor operations may be used to retrieve multiple items at once.

  • INTEGERDUP

    This option specifies that duplicate data items are binary integers, similar to INTEGERKEY keys.

  • REVERSEDUP

    This option specifies that duplicate data items should be compared as strings in reverse order.

  • CREATE

    Create the named database if it doesn't exist. This option is not allowed in a read-only transaction or a read-only environment.

flags
,
IntBuffer
address where the new MDB_dbi handle will be stored
dbi
)

Opens a database in the environment.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
mdb_dbi_open
(long
a transaction handle returned by txn_begin.
txn
,
CharSequence
the name of the database to open. If only a single database is needed in the environment, this value may be NULL.
name
,
int
special options for this database. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
  • REVERSEKEY

    Keys are strings to be compared in reverse order, from the end of the strings to the beginning. By default, Keys are treated as strings and compared from beginning to end.

  • DUPSORT

    Duplicate keys may be used in the database. (Or, from another perspective, keys may have multiple data items, stored in sorted order.) By default keys must be unique and may have only a single data item.

  • INTEGERKEY

    Keys are binary integers in native byte order, either unsigned int or size_t, and will be sorted as such. The keys must all be of the same size.

  • DUPFIXED

    This flag may only be used in combination with DUPSORT. This option tells the library that the data items for this database are all the same size, which allows further optimizations in storage and retrieval. When all data items are the same size, the GET_MULTIPLE, NEXT_MULTIPLE and PREV_MULTIPLE cursor operations may be used to retrieve multiple items at once.

  • INTEGERDUP

    This option specifies that duplicate data items are binary integers, similar to INTEGERKEY keys.

  • REVERSEDUP

    This option specifies that duplicate data items should be compared as strings in reverse order.

  • CREATE

    Create the named database if it doesn't exist. This option is not allowed in a read-only transaction or a read-only environment.

flags
,
IntBuffer
address where the new MDB_dbi handle will be stored
dbi
)

Opens a database in the environment.

public static int
mdb_dbi_open(long txn, ByteBuffer name, int flags, int[] dbi)

Array version of: dbi_open

public static int
mdb_dbi_open(long txn, CharSequence name, int flags, int[] dbi)

Array version of: dbi_open

public static int

Returns:

< 0 if a < b, 0 if a == b, > 0 if a > b
mdb_dcmp
(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBVal
the first item to compare
a
,
MDBVal
the second item to compare
b
)

Compares two data items according to a particular database.

public static int
mdb_del(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBVal
the key to delete from the database
key
,
MDBVal
the data to delete
data
)

Deletes items from a database.

public static int
mdb_drop(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
boolean
0 to empty the DB, 1 to delete it from the environment and close the DB handle
del
)

Empties or deletes+closes a database.

public static void
mdb_env_close(long
an environment handle returned by env_create
env
)

Closes the environment and releases the memory map.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_copy
(long
an environment handle returned by env_create. It must have already been opened successfully.
env
,
ByteBuffer
the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty.
path
)

Copies an LMDB environment to the specified path.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_copy
(long
an environment handle returned by env_create. It must have already been opened successfully.
env
,
CharSequence
the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty.
path
)

Copies an LMDB environment to the specified path.

public static int
mdb_env_copy2(long
an environment handle returned by env_create. It must have already been opened successfully.
env
,
ByteBuffer
the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty.
path
,
int
special options for this operation. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
  • CP_COMPACT - Perform compaction while copying: omit free pages and sequentially renumber all pages in output. This option consumes more CPU and runs more slowly than the default.
flags
)

Copies an LMDB environment to the specified path, with options.

public static int
mdb_env_copy2(long
an environment handle returned by env_create. It must have already been opened successfully.
env
,
CharSequence
the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty.
path
,
int
special options for this operation. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
  • CP_COMPACT - Perform compaction while copying: omit free pages and sequentially renumber all pages in output. This option consumes more CPU and runs more slowly than the default.
flags
)

Copies an LMDB environment to the specified path, with options.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_create
(PointerBuffer
the address where the new handle will be stored
env
)

Creates an LMDB environment handle.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_get_flags
(long
an environment handle returned by env_create
env
,
IntBuffer
the address of an integer to store the flags
flags
)

Gets environment flags.

public static int
mdb_env_get_flags(long env, int[] flags)

Array version of: env_get_flags

public static int
mdb_env_get_maxkeysize(long
an environment handle returned by env_create
env
)

Gets the maximum size of keys and DUPSORT data we can write.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_get_maxreaders
(long
an environment handle returned by env_create
env
,
IntBuffer
address of an integer to store the number of readers
readers
)

Gets the maximum number of threads/reader slots for the environment.

public static int
mdb_env_get_maxreaders(long env, int[] readers)

Array version of: env_get_maxreaders

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_get_path
(long
an environment handle returned by env_create
env
,
PointerBuffer
address of a string pointer to contain the path. This is the actual string in the environment, not a copy. It should not be altered in any way.
path
)

Returns the path that was used in env_open.

public static long
mdb_env_get_userctx(long
an environment handle returned by env_create
env
)

Gets the application information associated with the MDB_env.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_info
(long
an environment handle returned by env_create
env
,
MDBEnvInfo
the address of an MDBEnvInfo structure where the information will be copied
stat
)

Returns information about the LMDB environment.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • VERSION_MISMATCH - the version of the LMDB library doesn't match the version that created the database environment.
  • INVALID - the environment file headers are corrupted.
  • ENOENT - the directory specified by the path parameter doesn't exist.
  • EACCES - the user didn't have permission to access the environment files.
  • EAGAIN - the environment was locked by another process.
mdb_env_open
(long
an environment handle returned by env_create
env
,
ByteBuffer
the directory in which the database files reside. This directory must already exist and be writable.
path
,
int
Special options for this environment. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here. Flags set by env_set_flags are also used.
  • FIXEDMAP

    Use a fixed address for the mmap region. This flag must be specified when creating the environment, and is stored persistently in the environment. If successful, the memory map will always reside at the same virtual address and pointers used to reference data items in the database will be constant across multiple invocations. This option may not always work, depending on how the operating system has allocated memory to shared libraries and other uses.

    The feature is highly experimental.

  • NOSUBDIR

    By default, LMDB creates its environment in a directory whose pathname is given in path, and creates its data and lock files under that directory. With this option, path is used as-is for the database main data file. The database lock file is the path with "-lock" appended.

  • RDONLY

    Open the environment in read-only mode. No write operations will be allowed. LMDB will still modify the lock file - except on read-only filesystems, where LMDB does not use locks.

  • WRITEMAP

    Use a writeable memory map unless RDONLY is set. This uses fewer mallocs but loses protection from application bugs like wild pointer writes and other bad updates into the database. This may be slightly faster for DBs that fit entirely in RAM, but is slower for DBs larger than RAM.

    Incompatible with nested transactions.

    Do not mix processes with and without WRITEMAP on the same environment. This can defeat durability (env_sync etc).

  • NOMETASYNC

    Flush system buffers to disk only once per transaction, omit the metadata flush. Defer that until the system flushes files to disk, or next non-RDONLY commit or env_sync. This optimization maintains database integrity, but a system crash may undo the last committed transaction. I.e. it preserves the ACI (atomicity, consistency, isolation) but not D (durability) database property.

    This flag may be changed at any time using env_set_flags.

  • NOSYNC

    Don't flush system buffers to disk when committing a transaction. This optimization means a system crash can corrupt the database or lose the last transactions if buffers are not yet flushed to disk. The risk is governed by how often the system flushes dirty buffers to disk and how often env_sync is called. However, if the filesystem preserves write order and the WRITEMAP flag is not used, transactions exhibit ACI (atomicity, consistency, isolation) properties and only lose D (durability). I.e. database integrity is maintained, but a system crash may undo the final transactions. Note that (NOSYNC | WRITEMAP) leaves the system with no hint for when to write transactions to disk, unless env_sync is called. (MAPASYNC | WRITEMAP) may be preferable.

    This flag may be changed at any time using env_set_flags.

  • MAPASYNC

    When using WRITEMAP, use asynchronous flushes to disk. As with NOSYNC, a system crash can then corrupt the database or lose the last transactions. Calling env_sync ensures on-disk database integrity until next commit.

    This flag may be changed at any time using env_set_flags.

  • NOTLS

    Don't use Thread-Local Storage. Tie reader locktable slots to MDB_txn objects instead of to threads. I.e. txn_reset keeps the slot reseved for the MDB_txn object. A thread may use parallel read-only transactions. A read-only transaction may span threads if 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 LMDB's write locking is unaware of the user threads.

  • NOLOCK

    Don't do any locking. If concurrent access is anticipated, the caller must manage all concurrency itself. For proper operation the caller must enforce single-writer semantics, and must ensure that no readers are using old transactions while a writer is active. The simplest approach is to use an exclusive lock so that no readers may be active at all when a writer begins.

  • NORDAHEAD

    Turn off readahead. Most operating systems perform readahead on read requests by default. This option turns it off if the OS supports it. Turning it off may help random read performance when the DB is larger than RAM and system RAM is full.

    The option is not implemented on Windows.

  • NOMEMINIT

    Don't initialize malloc'd memory before writing to unused spaces in the data file. By default, memory for pages written to the data file is obtained using malloc. While these pages may be reused in subsequent transactions, freshly malloc'd pages will be initialized to zeroes before use. This avoids persisting leftover data from other code (that used the heap and subsequently freed the memory) into the data file. Note that many other system libraries may allocate and free memory from the heap for arbitrary uses. E.g., stdio may use the heap for file I/O buffers. This initialization step has a modest performance cost so some applications may want to disable it using this flag. This option can be a problem for applications which handle sensitive data like passwords, and it makes memory checkers like Valgrind noisy. This flag is not needed with WRITEMAP, which writes directly to the mmap instead of using malloc for pages. The initialization is also skipped if RESERVE is used; the caller is expected to overwrite all of the memory that was reserved in that case.

    This flag may be changed at any time using env_set_flags.

flags
,
int
The UNIX permissions to set on created files and semaphores.

This parameter is ignored on Windows.

mode
)

Opens an environment handle.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • VERSION_MISMATCH - the version of the LMDB library doesn't match the version that created the database environment.
  • INVALID - the environment file headers are corrupted.
  • ENOENT - the directory specified by the path parameter doesn't exist.
  • EACCES - the user didn't have permission to access the environment files.
  • EAGAIN - the environment was locked by another process.
mdb_env_open
(long
an environment handle returned by env_create
env
,
CharSequence
the directory in which the database files reside. This directory must already exist and be writable.
path
,
int
Special options for this environment. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here. Flags set by env_set_flags are also used.
  • FIXEDMAP

    Use a fixed address for the mmap region. This flag must be specified when creating the environment, and is stored persistently in the environment. If successful, the memory map will always reside at the same virtual address and pointers used to reference data items in the database will be constant across multiple invocations. This option may not always work, depending on how the operating system has allocated memory to shared libraries and other uses.

    The feature is highly experimental.

  • NOSUBDIR

    By default, LMDB creates its environment in a directory whose pathname is given in path, and creates its data and lock files under that directory. With this option, path is used as-is for the database main data file. The database lock file is the path with "-lock" appended.

  • RDONLY

    Open the environment in read-only mode. No write operations will be allowed. LMDB will still modify the lock file - except on read-only filesystems, where LMDB does not use locks.

  • WRITEMAP

    Use a writeable memory map unless RDONLY is set. This uses fewer mallocs but loses protection from application bugs like wild pointer writes and other bad updates into the database. This may be slightly faster for DBs that fit entirely in RAM, but is slower for DBs larger than RAM.

    Incompatible with nested transactions.

    Do not mix processes with and without WRITEMAP on the same environment. This can defeat durability (env_sync etc).

  • NOMETASYNC

    Flush system buffers to disk only once per transaction, omit the metadata flush. Defer that until the system flushes files to disk, or next non-RDONLY commit or env_sync. This optimization maintains database integrity, but a system crash may undo the last committed transaction. I.e. it preserves the ACI (atomicity, consistency, isolation) but not D (durability) database property.

    This flag may be changed at any time using env_set_flags.

  • NOSYNC

    Don't flush system buffers to disk when committing a transaction. This optimization means a system crash can corrupt the database or lose the last transactions if buffers are not yet flushed to disk. The risk is governed by how often the system flushes dirty buffers to disk and how often env_sync is called. However, if the filesystem preserves write order and the WRITEMAP flag is not used, transactions exhibit ACI (atomicity, consistency, isolation) properties and only lose D (durability). I.e. database integrity is maintained, but a system crash may undo the final transactions. Note that (NOSYNC | WRITEMAP) leaves the system with no hint for when to write transactions to disk, unless env_sync is called. (MAPASYNC | WRITEMAP) may be preferable.

    This flag may be changed at any time using env_set_flags.

  • MAPASYNC

    When using WRITEMAP, use asynchronous flushes to disk. As with NOSYNC, a system crash can then corrupt the database or lose the last transactions. Calling env_sync ensures on-disk database integrity until next commit.

    This flag may be changed at any time using env_set_flags.

  • NOTLS

    Don't use Thread-Local Storage. Tie reader locktable slots to MDB_txn objects instead of to threads. I.e. txn_reset keeps the slot reseved for the MDB_txn object. A thread may use parallel read-only transactions. A read-only transaction may span threads if 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 LMDB's write locking is unaware of the user threads.

  • NOLOCK

    Don't do any locking. If concurrent access is anticipated, the caller must manage all concurrency itself. For proper operation the caller must enforce single-writer semantics, and must ensure that no readers are using old transactions while a writer is active. The simplest approach is to use an exclusive lock so that no readers may be active at all when a writer begins.

  • NORDAHEAD

    Turn off readahead. Most operating systems perform readahead on read requests by default. This option turns it off if the OS supports it. Turning it off may help random read performance when the DB is larger than RAM and system RAM is full.

    The option is not implemented on Windows.

  • NOMEMINIT

    Don't initialize malloc'd memory before writing to unused spaces in the data file. By default, memory for pages written to the data file is obtained using malloc. While these pages may be reused in subsequent transactions, freshly malloc'd pages will be initialized to zeroes before use. This avoids persisting leftover data from other code (that used the heap and subsequently freed the memory) into the data file. Note that many other system libraries may allocate and free memory from the heap for arbitrary uses. E.g., stdio may use the heap for file I/O buffers. This initialization step has a modest performance cost so some applications may want to disable it using this flag. This option can be a problem for applications which handle sensitive data like passwords, and it makes memory checkers like Valgrind noisy. This flag is not needed with WRITEMAP, which writes directly to the mmap instead of using malloc for pages. The initialization is also skipped if RESERVE is used; the caller is expected to overwrite all of the memory that was reserved in that case.

    This flag may be changed at any time using env_set_flags.

flags
,
int
The UNIX permissions to set on created files and semaphores.

This parameter is ignored on Windows.

mode
)

Opens an environment handle.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • EINVAL - an invalid parameter was specified.
mdb_env_set_flags
(long
an environment handle returned by env_create
env
,
int
the flags to change, bitwise OR'ed together
flags
,
boolean
a non-zero value sets the flags, zero clears them.
onoff
)

Sets environment flags.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • EINVAL - an invalid parameter was specified, or the environment has an active write transaction.
mdb_env_set_mapsize
(long
an environment handle returned by env_create
env
,
long
the size in bytes
size
)

Sets the size of the memory map to use for this environment.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • EINVAL - an invalid parameter was specified, or the environment is already open.
mdb_env_set_maxdbs
(long
an environment handle returned by env_create
env
,
int
the maximum number of databases
dbs
)

Sets the maximum number of named databases for the environment.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • EINVAL - an invalid parameter was specified, or the environment is already open.
mdb_env_set_maxreaders
(long
an environment handle returned by env_create
env
,
int
the maximum number of reader lock table slots
readers
)

Sets the maximum number of threads/reader slots for the environment.

public static int
mdb_env_set_userctx(long
an environment handle returned by env_create
env
,
long
an arbitrary pointer for whatever the application needs
ctx
)

Set application information associated with the MDB_env.

public static int

Returns:

a non-zero error value on failure and 0 on success
mdb_env_stat
(long
an environment handle returned by env_create
env
,
MDBStat
the address of an MDBStat structure where the statistics will be copied
stat
)

Returns statistics about the LMDB environment.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • EACCES - the environment is read-only.
  • EINVAL - an invalid parameter was specified.
  • EIO - an error occurred during synchronization.
mdb_env_sync
(long
an environment handle returned by env_create
env
,
boolean
if non-zero, force a synchronous flush. Otherwise if the environment has the NOSYNC flag set the flushes will be omitted, and with MAPASYNC they will be asynchronous.
force
)

Flushes the data buffers to disk.

public static int
mdb_get(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBVal
the key to search for in the database
key
,
MDBVal
the data corresponding to the key
data
)

Gets items from a database.

public static int
mdb_put(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBVal
the key to store in the database
key
,
MDBVal
the data to store
data
,
int
special options for this operation. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
  • NODUPDATA - enter the new key/data pair only if it does not already appear in the database. This flag may only be specified if the database was opened with DUPSORT. The function will return KEYEXIST if the key/data pair already appears in the database.
  • NOOVERWRITE - enter the new key/data pair only if the key does not already appear in the database. The function will return KEYEXIST if the key already appears in the database, even if the database supports duplicates (DUPSORT). The data parameter will be set to point to the existing item.
  • RESERVE - reserve space for data of the given size, but don't copy the given data. Instead, return a pointer to the 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.

    LMDB does nothing else with this memory, the caller is expected to modify all of the space requested. This flag must not be specified if the database was opened with DUPSORT.

  • APPEND - append the given key/data pair to the end of the database. This option allows fast bulk loading when keys are already known to be in the correct order. Loading unsorted keys with this flag will cause a KEYEXIST error.
  • APPENDDUP - as above, but for sorted dup data.
flags
)

Stores items into a database.

public static int
mdb_reader_check(long
an environment handle returned by env_create
env
,
IntBuffer
number of stale slots that were cleared
dead
)

Checks for stale entries in the reader lock table.

public static int
mdb_reader_check(long env, int[] dead)

Array version of: reader_check

public static int
mdb_reader_list(long
an environment handle returned by env_create
env
,
MDBMsgFuncI
an MDBMsgFunc function
func
,
long
anything the message function needs
ctx
)

Dumps the entries in the reader lock table.

public static int
mdb_set_compare(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBCmpFuncI
an MDBCmpFunc function
cmp
)

Sets a custom key comparison function for a database.

public static int
mdb_set_dupsort(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBCmpFuncI
an MDBCmpFunc function
cmp
)

Sets a custom data comparison function for a DUPSORT database.

public static int
mdb_set_relctx(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
long
an arbitrary pointer for whatever the application needs. It will be passed to the callback function set by MDBRelFunc as its relctx parameter whenever the callback is invoked.
ctx
)

Sets a context pointer for a FIXEDMAP database's relocation function.

public static int
mdb_set_relfunc(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBRelFuncI
an MDBRelFunc function
rel
)

Sets a relocation function for a FIXEDMAP database.

public static int
mdb_stat(long
a transaction handle returned by txn_begin.
txn
,
int
a database handle returned by dbi_open
dbi
,
MDBStat
the address of an MDBStat structure where the statistics will be copied
stat
)

Retrieves statistics for a database.

public static String

Returns:

the description of the error
mdb_strerror
(int
the error code
err
)

Returns a string describing a given error code.

public static void
mdb_txn_abort(long
a transaction handle returned by txn_begin.
txn
)

Abandons all the operations of the transaction instead of saving them.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • PANIC - a fatal error occurred earlier and the environment must be shut down.
  • MAP_RESIZED - another process wrote data beyond this MDB_env's mapsize and this environment's map must be resized as well. See env_set_mapsize.
  • READERS_FULL - a read-only transaction was requested and the reader lock table is full. See env_set_maxreaders.
  • ENOMEM - out of memory.
mdb_txn_begin
(long
an environment handle returned by env_create
env
,
long
if this parameter is non-NULL, the new transaction will be a nested transaction, with the transaction indicated by parent as its parent. Transactions may be nested to any level. A parent transaction and its cursors may not issue any other operations than txn_commit and txn_abort while it has active child transactions.
parent
,
int
special options for this transaction. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
  • RDONLY - This transaction will not perform any write operations.
flags
,
PointerBuffer
address where the new MDB_txn handle will be stored
txn
)

Creates a transaction for use with the environment.

public static int

Returns:

a non-zero error value on failure and 0 on success. Some possible errors are:
  • EINVAL - an invalid parameter was specified.
  • ENOSPC - no more disk space.
  • EIO - a low-level I/O error occurred while writing.
  • ENOMEM - out of memory.
mdb_txn_commit
(long
a transaction handle returned by txn_begin.
txn
)

Commits all the operations of a transaction into the database.

public static long
mdb_txn_env(long
a transaction handle returned by txn_begin.
txn
)

Returns the transaction's MDB_env.

public static long

Returns:

a transaction ID, valid if input is an active transaction
mdb_txn_id
(long
a transaction handle returned by txn_begin.
txn
)

Returns the transaction's ID.

This returns the identifier associated with this transaction.

public static int
mdb_txn_renew(long
a transaction handle returned by txn_begin.
txn
)

Renews a read-only transaction.

public static void
mdb_txn_reset(long
a transaction handle returned by txn_begin.
txn
)

Resets a read-only transaction.

public static String

Returns:

the library version as a string
mdb_version
(IntBuffer
if non-NULL, the library major version number is copied here
major
,
IntBuffer
if non-NULL, the library minor version number is copied here
minor
,
IntBuffer
if non-NULL, the library patch version number is copied here
patch
)

Returns the LMDB library version information.

public static String
mdb_version(int[] major, int[] minor, int[] patch)

Array version of: version

public static native int
nmdb_cmp(long txn, int dbi, long a, long b)

Unsafe version of: cmp

public static native void
nmdb_cursor_close(long cursor)

Unsafe version of: cursor_close

public static native int
nmdb_cursor_count(long cursor, long countp)

Unsafe version of: cursor_count

public static native int
nmdb_cursor_dbi(long cursor)

Unsafe version of: cursor_dbi

public static native int
nmdb_cursor_del(long cursor, int flags)

Unsafe version of: cursor_del

public static native int
nmdb_cursor_get(long cursor, long key, long data, int op)

Unsafe version of: cursor_get

public static native int
nmdb_cursor_open(long txn, int dbi, long cursor)

Unsafe version of: cursor_open

public static native int
nmdb_cursor_put(long cursor, long key, long data, int flags)

Unsafe version of: cursor_put

public static native int
nmdb_cursor_renew(long txn, long cursor)

Unsafe version of: cursor_renew

public static native long
nmdb_cursor_txn(long cursor)

Unsafe version of: cursor_txn

public static native void
nmdb_dbi_close(long env, int dbi)

Unsafe version of: dbi_close

public static native int
nmdb_dbi_flags(long txn, int dbi, long flags)

Unsafe version of: dbi_flags

public static native int
nmdb_dbi_flags(long txn, int dbi, int[] flags)

Array version of: nmdb_dbi_flags

public static native int
nmdb_dbi_open(long txn, long name, int flags, long dbi)

Unsafe version of: dbi_open

public static native int
nmdb_dbi_open(long txn, long name, int flags, int[] dbi)

Array version of: nmdb_dbi_open

public static native int
nmdb_dcmp(long txn, int dbi, long a, long b)

Unsafe version of: dcmp

public static native int
nmdb_del(long txn, int dbi, long key, long data)

Unsafe version of: del

public static native int
nmdb_drop(long txn, int dbi, int del)

Unsafe version of: drop

public static native void
nmdb_env_close(long env)

Unsafe version of: env_close

public static native int
nmdb_env_copy(long env, long path)

Unsafe version of: env_copy

public static native int
nmdb_env_copy2(long env, long path, int flags)

Unsafe version of: env_copy2

public static native int
nmdb_env_create(long env)

Unsafe version of: env_create

public static native int
nmdb_env_get_flags(long env, long flags)

Unsafe version of: env_get_flags

public static native int
nmdb_env_get_flags(long env, int[] flags)

Array version of: nmdb_env_get_flags

public static native int
nmdb_env_get_maxkeysize(long env)

Unsafe version of: env_get_maxkeysize

public static native int
nmdb_env_get_maxreaders(long env, long readers)

Unsafe version of: env_get_maxreaders

public static native int
nmdb_env_get_maxreaders(long env, int[] readers)

Array version of: nmdb_env_get_maxreaders

public static native int
nmdb_env_get_path(long env, long path)

Unsafe version of: env_get_path

public static native long
nmdb_env_get_userctx(long env)

Unsafe version of: env_get_userctx

public static native int
nmdb_env_info(long env, long stat)

Unsafe version of: env_info

public static native int
nmdb_env_open(long env, long path, int flags, int mode)

Unsafe version of: env_open

public static native int
nmdb_env_set_flags(long env, int flags, int onoff)

Unsafe version of: env_set_flags

public static native int
nmdb_env_set_mapsize(long env, long size)

Unsafe version of: env_set_mapsize

public static native int
nmdb_env_set_maxdbs(long env, int dbs)

Unsafe version of: env_set_maxdbs

public static native int
nmdb_env_set_maxreaders(long env, int readers)

Unsafe version of: env_set_maxreaders

public static native int
nmdb_env_set_userctx(long env, long ctx)

Unsafe version of: env_set_userctx

public static native int
nmdb_env_stat(long env, long stat)

Unsafe version of: env_stat

public static native int
nmdb_env_sync(long env, int force)

Unsafe version of: env_sync

public static native int
nmdb_get(long txn, int dbi, long key, long data)

Unsafe version of: get

public static native int
nmdb_put(long txn, int dbi, long key, long data, int flags)

Unsafe version of: put

public static native int
nmdb_reader_check(long env, long dead)

Unsafe version of: reader_check

public static native int
nmdb_reader_check(long env, int[] dead)

Array version of: nmdb_reader_check

public static native int
nmdb_reader_list(long env, long func, long ctx)

Unsafe version of: reader_list

public static native int
nmdb_set_compare(long txn, int dbi, long cmp)

Unsafe version of: set_compare

public static native int
nmdb_set_dupsort(long txn, int dbi, long cmp)

Unsafe version of: set_dupsort

public static native int
nmdb_set_relctx(long txn, int dbi, long ctx)

Unsafe version of: set_relctx

public static native int
nmdb_set_relfunc(long txn, int dbi, long rel)

Unsafe version of: set_relfunc

public static native int
nmdb_stat(long txn, int dbi, long stat)

Unsafe version of: stat

public static native long
nmdb_strerror(int err)

Unsafe version of: strerror

public static native void
nmdb_txn_abort(long txn)

Unsafe version of: txn_abort

public static native int
nmdb_txn_begin(long env, long parent, int flags, long txn)

Unsafe version of: txn_begin

public static native int
nmdb_txn_commit(long txn)

Unsafe version of: txn_commit

public static native long
nmdb_txn_env(long txn)

Unsafe version of: txn_env

public static native long
nmdb_txn_id(long txn)

Unsafe version of: txn_id

public static native int
nmdb_txn_renew(long txn)

Unsafe version of: txn_renew

public static native void
nmdb_txn_reset(long txn)

Unsafe version of: txn_reset

public static native long
nmdb_version(long major, long minor, long patch)

Unsafe version of: version

public static native long
nmdb_version(int[] major, int[] minor, int[] patch)

Array version of: nmdb_version

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait