An apparatus comprising at least one processor; a memory to store instructions that are configured to instruct the at least one processor to: generate an index in the memory, the index comprising a hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B) and a hash table such that an entry in the hash table comprises an association between a date and a first data structure (308, 310) in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B); receive a search request from a remote device, the search request comprising a plurality of search parameters including the date; search the hash table, using the date, for a memory address of the first data structure (308, 310) in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B); determine a plan for traversing the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B) based on the search parameters; begin a search for data sought after by the search request at the first data structure (308, 310) in accordance with the traversal plan; and return results of the search to the remote device, characterized in that the first data structure (308, 310) is a first binary tree data structure (308, 310) at a first level in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B). at least one processor; a memory to store instructions that are configured to instruct the at least one processor to: generate an index in the memory, the index comprising a hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B) and a hash table such that an entry in the hash table comprises an association between a date and a first data structure (308, 310) in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B); receive a search request from a remote device, the search request comprising a plurality of search parameters including the date; search the hash table, using the date, for a memory address of the first data structure (308, 310) in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B); determine a plan for traversing the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B) based on the search parameters; begin a search for data sought after by the search request at the first data structure (308, 310) in accordance with the traversal plan; and return results of the search to the remote device, characterized in that the first data structure (308, 310) is a first binary tree data structure (308, 310) at a first level in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B). generate an index in the memory, the index comprising a hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B) and a hash table such that an entry in the hash table comprises an association between a date and a first data structure (308, 310) in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B); receive a search request from a remote device, the search request comprising a plurality of search parameters including the date; search the hash table, using the date, for a memory address of the first data structure (308, 310) in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B); determine a plan for traversing the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B) based on the search parameters; begin a search for data sought after by the search request at the first data structure (308, 310) in accordance with the traversal plan; and return results of the search to the remote device, characterized in that the first data structure (308, 310) is a first binary tree data structure (308, 310) at a first level in the hierarchy of interlinked data structures (308, 310, 312A, 314A, 316A, 318A, 320A, 322A, 324A, 334A, 334B, 336A, 336B, 338A, 338B, 340A, 340B, 342A, 342B, 344A, 344B).