A high-performance cache is disclosed. The cache is designed for time- and
space-efficiency for a diverse range of information objects. Information
objects are stored in portions of a non-volatile storage device called
arenas, which are contiguous regions from which space is allocated in
parallel. Objects are substantially contiguously allocated within an arena
and are mapped by name keys and content-based object keys to a tag table,
an open directory, and a directory table. The tag table is indexed by the
name keys, and stores references to sets in the directory table. The tag
table is compact and therefore can be stored in fast main memory,
facilitating rapid lookups. The directory table is organized so that at
least a frequently-accessed portion of it also usually resides in fast
main memory, which further speeds lookups. The tag and directory tables
are organized to quickly determine non-presence of objects. Large objects
are chunked into fragments, which are chained using a forward
functional-iteration mechanism, to prevent the need for mutating existing
on-disk data structures. Garbage collection periodically moves objects
within an arena or to other arenas. Additionally, for a plurality of
counters, the following is computed: (1) the sum of values stored in the
counters, and (2) the maximum value that can be represented by the
coimters. Each of the counters are decremented when the sum is greater
than half of the maximum value. Each of the counters is associated with an
information object, which is deleted when a counter is decremented to
zero.
Um esconderijo high-performance é divulgado. O esconderijo é projetado para o tempo e a espaço-eficiência para uma escala diversa de objetos da informação. Os objetos da informação são armazenados nas parcelas de um dispositivo de armazenamento permanente chamado as arenas, que são as regiões contíguas de que o espaço é alocado na paralela. Os objetos substancialmente contiguously são alocados dentro de uma arena e traçados pelas chaves conhecidas e por chaves índice-baseadas do objeto a uma tabela do Tag, a um diretório aberto, e a uma tabela do diretório. A tabela do Tag é posicionada pelas chaves conhecidas, e armazena referências aos jogos na tabela do diretório. A tabela do Tag é compacta e pode conseqüentemente ser armazenada na memória principal rápida, facilitando lookups rápidos. A tabela do diretório é organizada de modo que ao menos uma parcela frequently-accessed dela também resida geralmente na memória principal rápida, que lookups mais adicionais das velocidades. As tabelas do Tag e do diretório são organizadas para determinar rapidamente a non-presença dos objetos. Os objetos grandes são chunked nos fragmentos, que são acorrentados usando um mecanismo para diante da funcional-iteração, para impedir a necessidade para mutating estruturas de dados existentes do em-disco. A coleção do lixo move periòdicamente objetos dentro de uma arena ou a outras arenas. Adicionalmente, para um plurality dos contadores, o seguinte é computado: (1) a soma dos valores armazenados nos contadores, e (2) o valor máximo que pode ser representado pelos coimters. Cada um dos contadores é decrecido quando a soma é mais grande do que a metade do valor máximo. Cada um dos contadores é associado com um objeto da informação, que seja suprimido quando um contador é decrecido a zero.