June 25, 2008
Patricia TriesA better index for prefix searchesKonstantin Knizhnik
Specialized indexes like the Patricia Trie can lead to faster development and more efficient code.
Konstantin Knizhnik is a software engineer at McObject. He can be reached at knizhnik@mcobject.com.
A B-Tree can locate keys with a specified prefix; for example, finding all stock symbols starting with "AAA." But some applications require the opposite searchlocating keys that represent the longest prefixes of a specified value. Here a B-tree could perform several iterations, searching for different prefixes of the specified value starting from the longest, but this is inefficient. A much better index for prefix searches is the Patricia trie, which is a variation of a binary tree. Typically, the Patricia trie is used for performing two tasksphone routing and IP filtering. In the first case, given an incoming phone call and a table of operators with known prefixes, the right operator must be selected to handle the call. The second case deals with IP addresses: Given IP masks for valid/rejected domains, a received HTTP request should be classified as accepted, rejected, redirected, and so on. The following is a schema definition for a routing table. The mask is represented by a vector of bits (Booleans).
class Route
{
Vector<bool> dest;
uint4 gateway;
uint4 interf;
uint2 metric;
unique patricia<dest> by_dest;
};
To locate the proper route for the received IP address, the following search is performed in eXtremeDB using a Patricia trie:
The following code (from McObject's eXtremeDB embedded database; www.mcobject.com) converts the integer number representing the IP address into an array of bits:
Knowledge of specialized indexes enables faster development, more efficient code, and the ability to work with more complex data structures.
|
|
||||||||||||||||||||||||||||
|
|
|
|