Pular para o conteúdo

Conceitos

Modelo wide-column: tablets, SSTables e memtable

Intuição

Imagine uma secretária que recebe recados o dia todo: cada recado é primeiro copiado num diário de bordo, para não se perder, e depois colocado na ordem certa num rascunho sobre a mesa. Quando o rascunho enche, ele é passado a limpo numa folha ordenada que vai para o arquivo e nunca mais é rasurada; uma correção ou um cancelamento vira apenas um novo recado. De tempos em tempos, as folhas arquivadas são fundidas em poucas folhas maiores, e, para achar algo, olha-se o rascunho e depois as folhas, da mais nova para a mais antiga.

Como funciona

Os dados são mantidos em ordem pela chave de linha, e o intervalo de linhas é particionado em tablets, a unidade de distribuição e de balanceamento de carga; as colunas são agrupadas em famílias, e leituras e escritas sob uma mesma chave de linha são atômicas. Toda escrita válida vai primeiro para um log de commit, que dá durabilidade e, por ser gravado de forma sequencial, é barato de escrever, e só então é inserida na memtable, um buffer ordenado em memória. Quando a memtable atinge um limite, ela é congelada e gravada em disco como uma SSTable, um arquivo ordenado e imutável com índice por chave. Uma leitura consulta a memtable e as SSTables, da mais nova para a mais antiga, e um filtro de Bloom (no Cassandra, um por arquivo; no Bigtable, opcional) evita abrir as SSTables que não contêm a chave. Como cada descarga cria uma SSTable nova, compactações em segundo plano mesclam arquivos para limitar esse número, e a compactação maior reescreve todas em uma só, descartando entradas de exclusão e dados apagados. Como as SSTables nunca são alteradas, a memtable é a única estrutura mutável acessada por leituras e escritas, o que simplifica o controle de concorrência, e, após uma falha, a memtable é reconstruída reaplicando o log.

Na prática

Na modelagem, a chave de linha é a decisão central, pois linhas vizinhas ficam juntas e definem a localidade e a distribuição de carga; o paper do Bigtable inverte o nome do host da URL para que páginas do mesmo domínio fiquem contíguas. Escrever só no log sequencial e na memtable torna a escrita barata, o que combina com cargas de muita escrita, como o Inbox Search do Facebook, carga para a qual o Cassandra foi criado e que exigia bilhões de escritas por dia. O preço é que uma leitura pode precisar consultar vários arquivos, as compactações consomem I/O em segundo plano e a atomicidade vale dentro de uma linha, não entre linhas diferentes.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.