O que é um SSTable na infra-estrutura interna do Google?
O meu entendimento é que este é um formato de arquivo em disco representando um mapa de string para string. Os pares (chave, valor) são ordenados por chave, e escritos sequencialmente. No final do arquivo é escrito um índice que armazena cada chave e o offset do seu valor. Desta forma, apenas o índice (o tamanho de todas as chaves) precisa de caber na memória para permitir uma procura eficiente de qualquer string na tabela, mesmo quando os valores podem ser muito maiores do que a memória disponível. Para carregar uma SSTable para acesso aleatório, um processo irá buscar o índice, lê-lo (que pode ser uma cópia direta na memória ou mmap), e buscar valores apenas quando necessário.
SSTables são imutáveis, o que significa que uma vez escritos, os itens não podem ser adicionados ou removidos do mapa.
Até onde posso dizer o índice está no final para que uma SSTable possa ser construída em uma única passagem sobre a entrada, escrevendo os valores e construindo o índice na memória (com seus offsets), e então escrevendo o índice no final.
Uma aplicação de exemplo de SSTables é a Bigtable. Uma SSTable é usada para armazenar o conteúdo de parte de uma tabela (tablet). As teclas são (linha, coluna, tempo). Para simular a mutabilidade, novas SSTables são escritas que incluem as adições e remoções de valores na SSTable original. Ocasionalmente, uma "compactação" de coleta de lixo ocorrerá na qual todas essas tabelas serão fundidas em uma única. Esta estratégia evita escritas aleatórias e torna eficiente mover um tablet de um servidor para outro.
Artigos semelhantes
- Existe uma boa ferramenta de código aberto para uma rede social interna, que possa ser protegida para que permaneça interna?
- É verdade que você pode ver através da roupa com uma câmera infra-vermelha?
- Como impedir meu vizinho de usar uma arma de infra-som em mim
- Por que algumas aplicações smartphone são atribuídas à memória interna e não podem ser movidas para um cartão SIM externo?
- Na Unidade 3d, como posso decidir que variável devo manter como Pública, Protegida ou Interna?