astdb: Improve prefix searches in astdb

Using the LIKE operator requires a full table scan of 'astdb', whereas a
comparison operation is able to use the primary key index.

This patch adds a new function to the AstDB API for quick prefix matches
and updates res_sorcery_astdb to utilize it. This showed substantial
performance improvement in my test environment.

Related to ASTERISK~26806, but does not completely resolve it.

Change-Id: I7d37f9ba2aea139dabf2ca72d31fbe34bd9b2fa1
This commit is contained in:
Sean Bright
2017-12-07 15:19:40 -05:00
parent 54a86779a3
commit a4b291029f
3 changed files with 107 additions and 30 deletions

View File

@@ -83,6 +83,16 @@ int ast_db_deltree(const char *family, const char *keytree);
*/
struct ast_db_entry *ast_db_gettree(const char *family, const char *keytree);
/*!
* \brief Get a list of values with the given key prefix
*
* \param family The family to search under
* \param key_prefix The key prefix to search under
*
* \retval NULL An error occurred
*/
struct ast_db_entry *ast_db_gettree_by_prefix(const char *family, const char *key_prefix);
/*! \brief Free structure created by ast_db_gettree() */
void ast_db_freetree(struct ast_db_entry *entry);