1. A method comprising, by a computing device: receiving a first object; and storing the first object in a k-dimensional forest having a plurality of k-dimensional trees and each k-dimensional tree having a different size, comprising: if the smallest k-dimensional tree in the k-dimensional forest is not full, then storing the first object as a specific node in the smallest k-dimensional tree in the k-dimensional forest; and if the smallest k-dimensional tree in the k-dimensional forest is full, then: locating a first k-dimensional tree in the k-dimensional forest, the first k-dimensional tree being the smallest k-dimensional tree in the k-dimensional forest that is capable of storing the first object, objects in one or more second k-dimensional trees from the k-dimensional forest that are smaller than the first k-dimensional tree, and objects currently in the first k-dimensional tree; storing the first object as a specific node in the first k-dimensional tree; and moving the objects from the second k-dimensional trees to be stored as specific nodes in the first k-dimensional tree.