1. A system comprising: at least one processor; and a memory storing instructions configured to instruct the at least one processor to perform: serializing log entries associated with at least one logged event; dividing the serialized log entries into one or more distributed chunks for storage in one or more leaf nodes of an in-memory data storage module, wherein storage of at least one of the distributed chunks is striped across at least two randomly selected leaf nodes, and wherein a corresponding space limit of each of the one or more leaf nodes is adjusted based at least in part on a type of data being stored at the leaf node; providing a query to aggregators at hierarchical levels in the in-memory data storage module, wherein the aggregators are configured to pre-aggregate at least some data stored in the one or more leaf nodes of the in-memory data storage module in anticipation of the query; providing the query to leaf nodes of the in-memory data storage module; executing the query on the leaf nodes; returning results of the query to the aggregators; performing one or more aggregations on the results of the query; and updating a query cache that corresponds to the query to include data describing the results.