Quais são as limitações práticas em uma família de colunas em Cassandra?

10

Em Cassandra, não é recomendável ter mais de alguns milhares de famílias de colunas , digamos 2.000 por uma questão de argumento. Nos casos em que mais de 2.000 tipos de dados precisam ser persistidos, uma abordagem seria dividir vários tipos de dados não relacionados em cada família de colunas.

Por exemplo, um único CF pode conter Pedidos, Faturas e Clientes, desde que suas chaves de linha sejam distintas (por exemplo, prefixadas com o tipo de objeto, ou seja, as chaves de um único CF podem incluir ambos Order|1234e Customer|1234). Um segundo CF pode conter, por exemplo, Endereços, LineItems e OrderTypes. Dada a viabilidade básica dessa abordagem, quais são os limites práticos? Por exemplo, o que haveria de errado em colocar todos os 10.000 tipos de objetos em um único CF? Até onde eu sei pelo wiki do Cassandra , não há nenhuma limitação rígida no tamanho de um CF.

Andrew Swan
fonte

Respostas:

6

Eu não sou fã. É uma idéia tão boa quanto criar uma tabela relacional chamada OrdersOrCustomers com colunas definidas para ambos. A penalidade do mecanismo de armazenamento é um pouco menor no Cassandra por causa do armazenamento de células esparsas sob o capô, mas ainda é uma prática ruim.

Isso o incomoda mais tarde quando você deseja mapear / reduzir seus dados; cada tarefa terá que varrer todos os seus dados e filtrar as linhas que não correspondem ao que você realmente está interessado (por exemplo, clientes). E boa sorte para entender as estatísticas que Cassandra rastreia por CF. ("Esse CF é a fonte de 80% do meu aplicativo lido por causa dos dados do pedido? Ou por causa das sessões do cliente com as quais ele é combinado? Ou pelos outros cinco tipos de dados que inseri?")

Se você precisa absolutamente de dezenas ou centenas de milhares de CFs? Mesmo assim, prefiro rodar o Cassandra sem alocação de arena, do que mutilar meu modelo de dados assim.

jbellis
fonte
Obrigado pela sua resposta, Jonathan. Vou precisar ler a alocação da arena para entender a última frase. O uso da alocação de arena é uma opção de configuração?
Andrew Swan
Ou se atualmente a alocação de arena é inserida no Cassandra, quão difícil seria desalocar as arenas de quaisquer famílias de colunas que não foram acessadas dentro de um período configurável? Vale a pena registrar um ticket do JIRA sobre isso?
Andrew Swan
11
Cassandra já é esperta quanto à liberação para aliviar a pressão da memória. O problema está nos piores cenários em que tudo está ativo.
jbellis
Nesse caso, a única solução é ter um segundo toque?
Andrew Swan