O que é um SSTable?

Respostas:

105

Sorted Strings Table (emprestado do google) é um arquivo de pares de string de chave / valor, classificado por chaves

Schildmeijer
fonte
4
Obrigado por mais uma excelente resposta do SO Cassandra! BTW, você viu esta pergunta: stackoverflow.com/questions/2573106/…
knorv
Geralmente é imutável?
Dean J
1
sim, sstables são imutáveis ​​por design - o que é um recurso incrível
Schildmeijer
Como pode ser classificado e imutável então?
xjcl
56

"Um SSTable fornece um mapa imutável ordenado e persistente de chaves a valores, em que tanto as chaves quanto os valores são strings de bytes arbitrárias. As operações são fornecidas para pesquisar o valor associado a uma chave especificada e para iterar em todos os pares de chave / valor em um intervalo de chave especificado. Internamente, cada SSTable contém uma sequência de blocos (normalmente cada bloco tem 64 KB de tamanho, mas isso é configurável). Um índice de bloco (armazenado no final do SSTable) é usado para localizar blocos; o índice é carregado na memória quando o SSTable é aberto. Uma pesquisa pode ser realizada com uma única busca de disco: primeiro encontramos o bloco apropriado realizando uma pesquisa binária no índice na memória e, em seguida, lendo o bloco apropriado do disco. Opcionalmente, um SSTable pode ser completamente mapeado na memória, o que nos permite realizar pesquisas e varreduras sem tocar no disco."

zhouchonghz AT gmail.com
fonte
4
"sem tocar no disco" -> "sem saber que o disco está sendo tocado". IO com mapeamento de memória é uma técnica muito útil porque delega o IO real para o SO, presumindo que ele pode fazer um bom trabalho no armazenamento em cache (especialmente quando vários processos compartilham o mesmo arquivo). Mas tem a desvantagem de você não ter controle sobre ele. Se a página não estiver residente na memória, o thread será bloqueado e não poderá realizar outras operações; compare-o com "async IO", onde você pode registrar um retorno de chamada e fazer outras coisas no mesmo segmento, enquanto o IO está pendente.
ithkuil
2
@ithkuil: Você pode ter controle absoluto da memória IO mapeada pelo menos ao ponto de ser capaz de garantir que certas páginas estão na memória ou foram enviadas para o disco (ainda há espaço de manobra para páginas que não têm garantia de estar em memória, mas muito bem poderia ser). É disso que se tratam coisas maravilhosas como mlock (), msync () e MAP_LOCKED. Você também pode obter uma compreensão do que atualmente é e o que não é paginado por meio de mincore ().
Christopher Smith de
2
@ChristopherSmith: sim, você está certo, existem maneiras de controlá-lo. No entanto, geralmente é usado para seções críticas de desempenho (tempo real) ou problemas relacionados à segurança (como evitar que uma senha na memória seja trocada no disco). Os arquivos mapeados na memória são muito úteis exatamente pelo fato de que você não precisa decidir quanto deles manter na memória; caso contrário, você poderia apenas ler todo o arquivo na memória sem mmap e obter o mesmo efeito. Na verdade, eu apenas naveguei pelo código do cassandra; a única chamada é mlockall(MCL_CURRENT);feita na inicialização. Veja também: goo.gl/AEgPM
Ithkuil
4
A citação acima é do jornal BigTable .
ShreevatsaR
4

Um comprimido é armazenado na forma de SSTables.

SSTable (mapeado diretamente para GFS) é um armazenamento imutável baseado em valor-chave. Ele armazena blocos de dados, cada um com 64 KB.

Definições:

  • Índice das chaves: chave e localização inicial
  • Chunk é uma unidade de armazenamento em GFS, o gerenciamento de réplicas é por chunk
manjit singh
fonte
3
  • SSTable (engl. Sorted Strings Table) é um arquivo de pares de string de chave / valor, classificado por chaves.

  • Uma SSTable fornece um mapa imutável ordenado e persistente de chaves para valores, onde tanto as chaves quanto os valores são strings de bytes arbitrárias.

  • Internamente, cada SSTable contém uma sequência de blocos (normalmente,
    cada bloco tem 64 KB , mas isso é configurável).

Miksiii
fonte