Li muitos documentos do Cassandra e entendi que temos uma chave de partição, um hash dessa chave usada para dividir dados entre partições e distribuir os dados uniformemente entre os nós.
Mas o que exatamente é partição? É uma tabela, ou algum subconjunto na tabela, ou apenas outro material calculado usado para ordenar linhas no nó? É algo virtual puro, ou alguma entidade real que dá alguma sobrecarga?
É melhor limitar a quantidade de partições? Por exemplo, posso pegar o restante da divisão de uuid e usá-lo como chave de partição, que ainda equaliza os dados entre as partições, mas mantém a contagem de partições baixa, ou posso usar apenas o uuid inteiro?
Pensar nisso como um subconjunto de uma tabela é um bom começo. Cada nó é responsável por um intervalo específico de partições (também conhecidos como intervalos de token). É assim que os dados do Cassandra são distribuídos entre os nós. Os intervalos de token são calculados com base no valor hash das chaves de partição, independentemente da tabela em que os dados estão.
Então, basicamente, uma partição é um subconjunto de dados que é garantido estar em um único nó. É por isso que dizemos que para desempenho ideal, dados que são consultados juntos devem ser armazenados juntos (mesma partição).
A única vez em que uma consulta teria qualquer sobrecarga (relacionada a uma partição) seria se estivesse tentando consultar várias partições. Consultas multipartição (chave de partição) são ruins, porque um nó exato (contendo todos os dados a serem retornados) não pode ser determinado. Assim, um coordenador faz uma busca exaustiva em todo o cluster.
Não. Você definitivamente quer mais partições. Isso ajudará os dados a serem distribuídos de forma mais uniforme por todo o cluster. Da mesma forma, isso também ajuda a distribuir a atividade operacional em todo o cluster e ajuda a proteger um subconjunto de nós de sobrecarga.