A backend is a storage type, i.e. the type of a database;
think of a variable declaration:
where int, the type, is the backend, and i,
the name, is the database.
Configuration directives appearing after a
directive refer to all instances of that backend type.
Slapd implements different types of backends; other types
can be user-defined.
Backends can be roughly grouped in three distinct groups:
(The following mostly refers to 2.2 and later versions)
The first group contains bdb, hdb and ldbm:
- backends that actually store data
- backends that proxy otherwise stored data
- backends that generate data on the fly
The second group contains ldap, meta, relay and sql:
- bdb uses Berkeley's Sleepycat
(at least 4.2.52 with patches) as storage, taking advantage of specific
- hdb shares most of the code with bdb, but uses
a hierarchical in-memory organization of the tree structure, which
is not saved on disk in index files. As such, it can be much more
efficient at writing, with the penalty of requiring a bit longer at startup
to recreate the indices. Eventually, it will replace bdb;
- ldbm uses a neutral storage interface which in principle could wrap
dbm, ndbm, gdbm or sleepycat as underlying storage; however, only Sleepycat
is considered a reliable choice, so bdb offers more
interesting features (ACID). Eventually it will disappear.
The third group contains dnssrv, monitor, null passwd, perl and shell
(tcl is no longer supported):
- ldap: proxies a remote DSA;
- meta: proxies a pool of remote DSAs, sharing
(part of) the naming context;
- relay: proxies a local database; is used to create virtual views of real databases.
- sql: maps an existing RDBMS into a DSA (with limitations);
See What is a database?
and slapd-<backend> for details.
- dnssrv: returns referrals according to DNS SRV mappings
- monitor: returns monitoring info;
- null: compare always returns false; bind always fails; search is always successful, but returns no results; all write operations are always successful, but data is simply discarded; inspired by /dev/null.
- passwd: maps binds, searches and compares
to /etc/passwd contents;
- perl: allows to execute a set of perl scripts to perform each operation;
- shell: allows to execute a set of shell scripts to perform each operation;