snmp_local_db

MODULE

snmp_local_db

MODULE SUMMARY

The SNMP built-in database

DESCRIPTION

The module snmp_local_db contains functions for
implementing tables (and
variables) using the SNMP built-in database. The database exists in
two instances, one volatile and one persistent. The volatile
database is implemented with ets. The persistent database is
implemented with a module, pets (Persistent ets (Erlang Term
Store)), that keeps an ets database in memory for speed, and on
disk for persistent storage. At start-up, the ets database is
initialized from disk. All readings from the database
go to the
ets. Writings go also to the ets, and a note is made in a log
file. When the database is closed, the entire ets database is
dumped, and the log file is cleared. If a crash occurs, the log
file will always contain the latest changes. At start-up, the
dumped ets is read, and then the database is recovered using the
log file. It is also possible to manually dump the database, in
which case the entire ets is dumped, and the log file is cleared.

There are three scaling problems with this database.

If the database is never dumped, there are a lot of
modifications to the database and the log file will grow
rapidly. This can be solved by regularly dumping the
database.

The second problem occurs if the database is
large, dumping the entire database may take some considerable
time and it may slow down the system.

The third problem is that insertions and deletions are
inefficient for large tables.

All these problems are best solved by using Mnesia instead.

The following functions describe the interface to
snmp_local_db. Each function has a Mnesia equivalent. The
argument NameDb is a tuple {Name, Db} where
Name is the symbolic name of the managed object (as defined
in the MIB), and Db is either volatile or
persistent. mnesia is not possible since all these
functions are snmp_local_db specific.

Common data types

In the functions defined below, the following types are
used:

NameDb = {Name, Db}

Name = atom(), Db = volatile | persistent

RowIndex = [int()]

Cols = [Col] | [{Col, Value}], Col = int(), Value =
term()

where RowIndex denotes the last part of the OID, that
specifies the index of the row in tha table. Cols is a
list of column numbers in case of a get operation, and a list of
column numbers and values in case of a set operation.

EXPORTS

This function can be used to dump the database at any
time. The entire ets database is dumped to disk, and the log
file is cleared. This might be useful if the log file grows
rapidly. Returns {error, Reason} if a file system
error occured.