Table of Contents
List of Tables
List of Examples
cachedb_url
parameterexec_threshold
parametercompat_mode_2.4
parametercompat_mode_3.0
parameterThis module is an implementation of a cache system designed to work with MongoDB servers. It implements the Key-Value interface exposed by the OpenSIPS core.
The underlying client library is compatible with any of the following MongoDB server versions: 2.4, 2.6, 3.0, 3.2 and 3.4, as stated in the MongoDB documentation.
memory costs are no longer on the server
many servers can be used inside a cluster, so the memory is virtually unlimited
the cache is 100% persistent. A restart of OpenSIPS server will not affect the DB. The MongoDB is also persistent so it can also be restarted without loss of information.
MongoDB is an open-source project so it can be used to exchange data with various other applications
By creating a MongoDB Cluster, multiple OpenSIPS instances can easily share key-value information
This module also implements the CacheDB Raw query capability, thus you can run whatever query that the MongoDB back-end supports, taking full advatange of it.
The following packages must be installed before running OpenSIPS with this module loaded:
Example 1.1. Runtime requirements for "cachedb_mongodb"
# Debian / Ubuntu sudo apt-get install libjson-c2 libmongoc-1.0 # Red Hat / CentOS sudo yum install json-c mongo-c-driver
The following packages are required in order to compile this module:
Example 1.2. Compilation requirements for "cachedb_mongodb"
# Debian / Ubuntu sudo apt-get install libjson-c-dev libmongoc-dev libbson-dev # Red Hat / CentOS sudo yum install json-c-devel mongo-c-driver-devel
The URLs of the server groups that OpenSIPS will connect to in order to allow the cache_store(), cache_fetch(), etc. functions to be used from the OpenSIPS script. It can be set more than one time. The prefix part of the URL will be the identifier that will be used from the script.
The URL syntax is identical to the one used by MongoDB, including connect string options. For more info, please refer to the official MongoDB connect string documentation.
Example 1.3. Set cachedb_url
parameter
... # Connect to a single mongod instance modparam("cachedb_mongodb", "cachedb_url", "mongodb://localhost:27017/opensipsDB.dialog") # Connect to a mongod replica set modparam("cachedb_mongodb", "cachedb_url", "mongodb://10.0.0.10,10.0.0.11:27017/opensipsDB.dialog?replicaSet=my-set") # Connect to a mongos instance (routes to a sharded cluster) modparam("cachedb_mongodb", "cachedb_url", "mongodb://localhost/opensipsDB.dialog") # Example of multiple connections: # * to a main mongos, with failover to a backup mongos # * to a single mongod modparam("cachedb_mongodb", "cachedb_url", "mongodb:cluster://localhost,10.0.0.10:27017/opensipsDB.dialog") modparam("cachedb_mongodb", "cachedb_url", "mongodb://localhost:27017/opensipsDB.userlocation") ...
Example 1.4. Reference MongoDB connections
... cache_store("mongodb", "key", "$ru value"); cache_remove("mongodb:cluster", "key"); cache_fetch("mongodb:instance1", "key", $avp(10)); ...
The maximum number of microseconds that a mongodb query can last. Anything above the threshold will trigger a warning message to the log
Default value is “0 ( unlimited - no warnings )”.
Example 1.5. Set exec_threshold
parameter
... modparam("cachedb_mongodb", "exec_threshold", 100000) ...
Switch the module into compatibility mode for MongoDB 2.4 servers. Specifically, this allows "insert/update/delete" raw queries to not fail, since they were introduced in MongoDB 2.6. The module will interpret the raw query JSON, convert it to its corresponding command and run it.
Caveat: only the minimally required raw query options are supported in this mode.
Default value is “0 (disabled)”.
Example 1.6. Setting the compat_mode_2.4
parameter
... modparam("cachedb_mongodb", "compat_mode_2.4", 1) ...
Switch the module into compatibility mode for MongoDB 2.6/3.0 servers. Specifically, this allows "find" raw queries to not fail, since they were introduced in MongoDB 3.2. The module will interpret the "find" raw query JSON, convert it to its corresponding command and run it.
Caveat: only the minimally required options for "find" raw queries are supported in this mode.
Default value is “0 (disabled)”.
Example 1.7. Setting the compat_mode_3.0
parameter
... modparam("cachedb_mongodb", "compat_mode_3.0", 1) ...
The cachedb_mongodb module supports raw queries, thus taking full advantage of the capabilities of the back-end, including query-specific options such as read/write preference, timeouts, filtering options, etc.
The query syntax is identical to the mongo cli. Documentation for it can be found on the MongoDB website. Query results are returned as JSON documents, that one can further process in the OpenSIPS script by using the JSON module.
Some example raw queries:
Example 1.8. MongoDB Raw Insert
... cache_raw_query("mongodb:cluster", "{ \ \"insert\": \"ip_blacklist\", \ \"documents\": [{ \ \"username\": \"$fU\", \ \"ip\": \"$si\", \ \"attempts\": 1 \ }]}", "$avp(out)"); xlog("INSERT RAW QUERY returned $rc, output: '$avp(out)'\n"); ...
Example 1.9. MongoDB Raw Update
... cache_raw_query("mongodb:cluster", "{ \ \"update\": \"ip_blacklist\", \ \"updates\": [{ \ \"q\": { \ \"username\": \"$fU\", \ \"ip\": \"$si\" \ }, \ \"u\": { \ \"$$inc\": {\"attempts\": 1} \ } \ }]}", "$avp(out)"); xlog("UPDATE RAW QUERY returned $rc, output: '$avp(out)'\n"); ...
Table 2.1. Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)
Name | DevScore | Commits | Lines ++ | Lines -- | |
---|---|---|---|---|---|
1. | Liviu Chircu (@liviuchircu) | 153 | 83 | 2921 | 2759 |
2. | Vlad Paiu (@vladpaiu) | 37 | 10 | 3018 | 50 |
3. | Razvan Crainea (@razvancrainea) | 13 | 11 | 31 | 27 |
4. | Ovidiu Sas (@ovidiusas) | 10 | 8 | 92 | 16 |
5. | Vlad Patrascu (@rvlad-patrascu) | 6 | 4 | 96 | 11 |
6. | Bogdan-Andrei Iancu (@bogdan-iancu) | 5 | 3 | 3 | 5 |
7. | Alexandra Titoc | 4 | 2 | 10 | 3 |
8. | Dan Pascu (@danpascu) | 4 | 2 | 4 | 4 |
9. | Alessio Garzi (@Ozzyboshi) | 4 | 2 | 2 | 2 |
10. | @jalung | 3 | 1 | 97 | 56 |
All remaining contributors: tcresson, Maksym Sobolyev (@sobomax), Julián Moreno Patiño, Peter Lemenkov (@lemenkov).
(1) DevScore = author_commits + author_lines_added / (project_lines_added / project_commits) + author_lines_deleted / (project_lines_deleted / project_commits)
(2) including any documentation-related commits, excluding merge commits. Regarding imported patches/code, we do our best to count the work on behalf of the proper owner, as per the "fix_authors" and "mod_renames" arrays in opensips/doc/build-contrib.sh. If you identify any patches/commits which do not get properly attributed to you, please submit a pull request which extends "fix_authors" and/or "mod_renames".
(3) ignoring whitespace edits, renamed files and auto-generated files
Table 2.2. Most recently active contributors(1) to this module
Name | Commit Activity | |
---|---|---|
1. | Liviu Chircu (@liviuchircu) | Mar 2014 - Sep 2024 |
2. | Razvan Crainea (@razvancrainea) | Aug 2015 - Sep 2024 |
3. | Alexandra Titoc | Sep 2024 - Sep 2024 |
4. | Vlad Paiu (@vladpaiu) | Jan 2013 - Aug 2024 |
5. | tcresson | Oct 2023 - Oct 2023 |
6. | Maksym Sobolyev (@sobomax) | Feb 2023 - Feb 2023 |
7. | Vlad Patrascu (@rvlad-patrascu) | May 2017 - May 2021 |
8. | Bogdan-Andrei Iancu (@bogdan-iancu) | Oct 2014 - Mar 2020 |
9. | Alessio Garzi (@Ozzyboshi) | Nov 2019 - Dec 2019 |
10. | Dan Pascu (@danpascu) | May 2019 - May 2019 |
All remaining contributors: Peter Lemenkov (@lemenkov), @jalung, Julián Moreno Patiño, Ovidiu Sas (@ovidiusas).
(1) including any documentation-related commits, excluding merge commits
Last edited by: Liviu Chircu (@liviuchircu), Peter Lemenkov (@lemenkov), Julián Moreno Patiño, Vlad Paiu (@vladpaiu).
Documentation Copyrights:
Copyright © 2013-2017 www.opensips-solutions.com