Module: sip-router Branch: master Commit: c90d02e608c048a3bbcf263daadb024c829bded2 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c90d02e6...
Author: Henning Westerholt henning.westerholt@1und1.de Committer: Henning Westerholt henning.westerholt@1und1.de Date: Thu Apr 30 18:54:26 2009 +0200
generate README for bdb module
---
modules_s/bdb/README | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 199 insertions(+), 0 deletions(-)
diff --git a/modules_s/bdb/README b/modules_s/bdb/README new file mode 100644 index 0000000..4817972 --- /dev/null +++ b/modules_s/bdb/README @@ -0,0 +1,199 @@ +1. BDB Module + + Sippy Software, Inc. + + Copyright � 2006 Sippy Software, Inc. + Revision History + Revision $Revision$ $Date$ + __________________________________________________________________ + + 1.1. Overview + + 1.1.1. Design of DBD Engine + + 1.2. Dependencies + + 1.2.1. External libraries or applications + + 1.3. Exported parameters + + 1.3.1. describe_table (string) + + 1.4. Constrains and limitations + 1.5. Installation and running + + 1.5.1. Using BDB With Basic SER Configuration + +1.1. Overview + + The SER (SIP Express Router) supports several different persistent + storage backends (flatfile, dbtext and several SQL servers). However, + in certain cases those existing backends don't satisfy conditions. + Particularly, SQL server-based backends typically provide good + performance and scalability, but at the same time require considerable + efforts to configure and manage and also have significant memory and + on-disk footprint, while simpler storage backends (flatfile, dbtext) + are lighter and simpler to setup and manage, but scale poorly and don't + provide sufficient performance. For certain types of applications (i.e. + embedded SIP applications, SIP load balancing farms etc), different + solution that would combine some of the non-overlapping properties of + those two existing classes of backends is necessary. + + Berkeley DB is widely regarded as industry-leading open source, + embeddable database engine that provides developers with fast, + reliable, local persistence with almost zero administration. + +1.1.1. Design of DBD Engine + + The dbtext database system architecture: + * A database is represented by a directory in the local file system + where BDB environment is located. + +Note + When using BDB driver in SER, the database URL for modules must be + the path to the directory where the BDB environment is located, + prefixed by "bdb://", e.g., "bdb:///var/db/ser". If there is no "/" + after "bdb://" then "CFG_DIR/" (the OS-specific path defined at + SER's compile time) is inserted at the beginning of the database + path automatically. So that, either an absolute path to database + directory, or one relative to "CFG_DIR" directory should be + provided in the URL. + * The individual tables internaly are represented by binary files + inside environment directory. + +Note + The BDB driver uses BTree access method. + On-disk storage format has been developed to be as simple as + possible, while meeting performance requirements set forth above. + It is not compatible with on-disk format of any other BDB-based DB + engine (e.g. MySQL's BDB table handler). + +1.2. Dependencies + +1.2.1. External libraries or applications + + The next libraries or applications must be installed before running SER + with this module: + * Berkeley DB 4.X + +1.3. Exported parameters + +1.3.1. describe_table (string) + + Define the table and its structure. Each table that will be used by + other modules has to be defined. The format of the parameter is: + table_name:column_name_1(column_type_1)[column_name_2(column_type_2)[.. + . column_name_N(column_type_N)]] + + The names of table and columns must not include white spaces. + + The first column in definition is used as index. + + Between name of table and name of first column must be ":". + + Between two columns definitions must be exactly one white space. + + Type of column has to be enclosed into parentheses. + + Supported column types are: + * int + * float + * double + * string + * str + * datetime + * blob + * bitmap + +1.4. Constrains and limitations + + Use of indexes: + * Effective SELECT, UPDATE and DELETE operations on a structured + storage that contains any more or less decent number of records are + impossible without using some kind of indexing scheme. Since + Berkley DB is relatively simple storage engine it provides only + basic support for indexing, nearly not as rich as usually expected + by an average SQL user. Therefore, it has been decided to limit + number of indexes supported to one per table. This is sufficient + for most of the uses in the SER (for example: usrloc, auth_db etc). + * SELECT/UPDATE/DELETE records matching criteria. Due to its + simplicity, Berkley DB only supports exact match on indexed field. + In order to support <, >, <= and >= operations mandated by the SIP + DB API it is necessary to fall back to sequental scan of the index + values, which obviously has significant negative impact on + performance. Fortunately those advanced records matching criterias + are not required neither by the usrloc module nor by auth_db + module. + * BDB driver uses index only if key column appears in search clause + at least once and records matching operator associated with it is + '='. + * It is not allowed to set index value to NULL or an empty string. + * It is not allowed to update index value. The DELETE followed by + INSERT should be used instead. + + BDB driver does not support db_raw_query() method. + + BDB driver does not support ORDER BY clause of db_query() method. + +1.5. Installation and running + + Compile the module and load it instead of mysql or other DB modules. + + Example 1. Load the bdb module +... +loadmodule "/path/to/ser/modules/dbb.so" +... +modparam("module_name", "db_url", "bdb:///path/to/bdb/database") +... + + Example 2. definition of the standard version table +... +modparam("bdb", "describe_table", "version:table_name(str) table_version(int)") +... + +1.5.1. Using BDB With Basic SER Configuration + + Here are the definitions for tables used by usrloc module as well as a + part of basic configuration file to use BDB driver with SER. The table + structures may change in future releases, so that some adjustment to + example below may be necessary. That example corresponds to SER v0.9.4 + + According to the configuration file below, the table files will be + placed in the //var/db/ser/ directory. + + The table version should be populated manually before the SER is + started. To do this version.dump file located in the directotry of BDB + driver sources and db_load utility from Berkeley BD distribution should + be used as follows: + + Example 3. Population of version table +$ db_load -h /var/db/ser -f version.dump version + + Example 4. Configuration file +# ---------- global configuration parameters ------------------------ + +# [skip] + +# ---------- module loading ----------------------------------------- + +loadmodule "/usr/local/lib/ser/modules/usrloc.so" +loadmodule "/usr/local/lib/ser/modules/bdb.so" + +# ---------- module-specific configuration parameteres -------------- + +modparam("usrloc", "db_mode", 2) +modparam("usrloc", "timer_interval", 3) +modparam("usrloc", "db_url", "bdb:///var/db/ser") + +modparam("bdb", "describe_table", "version:table_name(str) table_version(int)") + +modparam("bdb", "describe_table", "location:username(str) domain(str) contact(st +r) i_env(int) expires(datetime) q(double) callid(str) cseq(int) method(str) flag +s(int) user_agent(str) received(str)") +modparam("bdb", "describe_table", "aliases:username(str) domain(str) contact(str +) i_env(int) expires(datetime) q(double) callid(str) cseq(int) method(str) flags +(int) user_agent(str) received(str)") + +# ---------- request routing logic ---------------------------------- + +# [skip]