Qual é o objetivo das famílias de colunas?

9

Vi que os sistemas de banco de dados NoSQL como o RocksDB oferecem um recurso chamado famílias de colunas . Acredito entender o que o conceito se refere, mas quais são os benefícios reais (práticos) de usá-los? Presumo que eles possam melhorar o desempenho da pesquisa em alguns casos, ou a localização espacial dos valores-chave, pelo menos? Parece que isso não afetaria a semântica real do acesso ao banco de dados, pelo que entendi. Isso está correto? Tem algo que estou perdendo?

Noldorin
fonte

Respostas:

3

Acabei de descobrir algumas informações interessantes do FAQ do RocksDB . (RocksDB é uma loja KV.)

Aqui estão alguns extratos relevantes.

P: Para que são usadas as famílias de colunas?

R: Os motivos mais comuns do uso de famílias de colunas: (1) use diferentes configurações de compactação, comparadores, tipos de compactação, operadores de mesclagem ou filtros de compactação em diferentes partes dos dados; (2) solte uma família de colunas para excluir seus dados; (3) uma família de colunas para armazenar metadados e outra para armazenar os dados.

P: Qual é a diferença entre armazenar dados em várias famílias de colunas e em vários bancos de dados rocksdb?

R: As principais diferenças serão backup, gravações atômicas e desempenho das gravações. A vantagem de usar vários bancos de dados: banco de dados é a unidade de backup ou ponto de verificação. É mais fácil copiar um banco de dados para outro host do que uma família de colunas. Vantagens do uso de várias famílias de colunas: (1) os lotes de gravação são atômicos em várias famílias de colunas em um banco de dados. Você não pode conseguir isso usando vários bancos de dados RocksDB. (2) Se você emitir gravações sincronizadas no WAL, muitos bancos de dados poderão prejudicar o desempenho.

P: Tenho diferentes espaços-chave. Devo separá-los por prefixos ou usar diferentes famílias de colunas?

R: Se cada espaço de chave for razoavelmente grande, é uma boa ideia colocá-los em diferentes famílias de colunas. Se puder ser pequeno, considere agrupar vários espaços-chave em uma família de colunas, para evitar o problema de manter muitas famílias de colunas.

Noldorin
fonte
2

Sei que você não está procurando um paralelo com o SQL, mas este artigo explica como planejar simplesmente o objetivo e o benefício prático das famílias de colunas.

De Noções básicas sobre o modelo de dados Cassandra de uma perspectiva SQL no RubyScale:

O que é uma família de colunas para então? Apenas um prefixo de tabela? Uma família de colunas possui várias configurações que alteram seu comportamento. Existem configurações de cache para as chaves (os UUIDs neste exemplo), configurações de cache para as linhas inteiras (a tabela inteira neste exemplo) e, mais importante, a classificação. Em Cassandra não há OFFSET, apenas LIMIT e o equivalente a ENTRE . Neste exemplo, os nomes das colunas são apenas cadeias de caracteres, mas também podem ser números inteiros ou registros de data e hora e são sempre armazenados em ordem de classificação. Uma família de colunas pode ter dados ordenados por carimbo de data / hora em que você consulta itens por intervalo de tempo e outro pode ser dados do catálogo de endereços em que você consulta itens em ordem alfabética. A única classificação que você faz após o fato é reverter uma fatia específica.

Nelz
fonte
Interessante. Como você diz, não responde totalmente à pergunta, mas fornece uma dica. Obrigado.
Noldorin