Kamailio and MongoDB
Details about how to use Kamailio with a MongoDB backend.
Kamailio Database
The use command in mongodb client mongo creates the database if it doesn't exit:
# mongo
> use kamailio
To display the databases, you can use:
> show dbs
Note that a database is not shown by the above command if it is empty -- you need to add some records to it.
Version Table
Kamailio uses version table to check if the structure of a database table has the structure version the C code expects.
A table is MongoDB is named collection. To create the collection version, do:
> db.createCollection("version")
List the existing collections in the current database:
> show collections
system.indexes
version
>
Version Table Records
Add the records for the other Kamailio tables you are going to use. Some examples:
> db.getCollection("version").insert({table_name: "subscriber", table_version: NumberInt(6) })
> db.getCollection("version").insert({table_name: "location", table_version: NumberInt(8) })
> db.getCollection("version").insert({table_name: "presentity", table_version: NumberInt(4) })
> db.getCollection("version").insert({table_name: "watchers", table_version: NumberInt(3) })
> db.getCollection("version").insert({table_name: "active_watchers", table_version: NumberInt(11) })
To learn what is the version number for a specific table, look inside lib/srdb1/schema/, there is an xml file with the name of the table and inside it you should see the version attribute.
Other Tables
MongoDB doesn't have a schema definition for documents stored in a collection. It is not required to create a collection before inserting a record to it.
Anyhow, if you want, you can create the collections in advance, using:
> db.createCollection("tablename")
Kamailio Config
DB URL
You need to load the "db_mongodb" module in the configuration.
The corresponding database URL in kamailio.cfg:
- if MongoDB is on local host and there is no username and password to connect to it:
#!define DBURL "mongodb://localhost/kamailio"
- if MongoDB is on local host and there is a username and password to connect to it:
#!define DBURL "mongodb://username:password@localhost/kamailio"
Other Parameters
If you store location records in MongoDB, set the following parameter for usrloc modules:
modparam("usrloc", "db_insert_null", 1)