Usar o endereço IP como chave primária é uma boa prática no scylla db?


8

Estou usando scylla db e tenho uma tabela usando o endereço IP como chave primária. A RF do cluster é 3. Acho que alguns nós têm muito mais carga (ocupam mais espaço em disco) do que outros, mesmo que oowns estatísticas estejam próximas (31% ~ 35%)

Eu estou querendo saber é que, porque eu estou usando o endereço IP como chave primária e alguns endereços IP são mais quentes do que outros (como mais atualizações nesses IPs)?


1
Considere o uso de partições de topo do nodetool para ver quem podem ser os atores mais ruins.
Peter Corless

Respostas:


2

O fato de alguns endereços IP serem mais quentes - obtendo mais leituras ou gravações - que outros - geralmente é não é um grande problema e é bastante comum. O Scylla os dividirá aleatoriamente entre os diferentes nós (e núcleos em cada nó) e, desde que você tenha muitas partições significativamente mais quentes do que núcleos no cluster, a carga - e o uso do disco - deverão ser razoavelmente bem equilibrados.

As coisas podem tornar-se diferente em casos extremos, como quando cada atualização crescer uma partição (ou seja, adicionar uma linha para ele), e apenas algumas partições são extremamente quente. Por exemplo, você pode imaginar um banco de dados usado para registrar solicitações e, além de um milhão de clientes normais com 10 solicitações por dia, também possui 10 "atacantes" que fazem um milhão de solicitações por dia. Nesses casos extremos, você pode encontrar alguns nós que transportam significativamente mais carga e / ou espaço em disco do que outros. Casos extremos também podem causar outros problemas: embora o suporte do Scylla a grandes partições tenha melhorado recentemente, ele ainda não é perfeito, e se você pode evitar casos extremos, é melhor.

Por fim, se eu voltar à sua pergunta original, "Usar o endereço IP como chave primária é uma boa prática no scylla db?", A resposta é "sim, mas":

É "sim" porque o Scylla não tem nenhum problema específico com os endereços IP como chave - ele distribui os diferentes endereços IP para diferentes nós aleatoriamente (usando a função de hash "murmur3")), portanto não há nenhum problema específico com o fato de os endereços IP se aglomerarem juntos (por exemplo, vários clientes da mesma sub-rede não são apenas enviados para os mesmos nós do cluster).

É "mas" porque o problema não são os endereços IP como uma chave em si, mas o conteúdo da partição que você pretende armazenar para ela e como a frequência e o tamanho da atualização são distorcidos para as diferentes partições.

Ah, e uma última nota:

Se você estiver usando o STCS ( Size Tierd Compaction Strategy ), o uso máximo do espaço em disco em um determinado momento pode ser bem maior que a quantidade real de dados armazenados. Se sua carga de trabalho for substituída (os dados não estão sendo adicionados, mas substituídos, excluídos etc.), antes que a compactação termine seu trabalho, os dados no disco podem muito bem ser o dobro da quantidade real de dados. Se esse for o caso, se você inspecionar o sistema em algum momento aleatório, vainotará que alguns nós têm mais dados no disco do que outros, dependendo da posição aleatória deles no trabalho de compactação ao fazer essa medição. Algo que você pode fazer para verificar se é isso que você está vendo é chamar "compactação principal" em todos os nós,


5

Você provavelmente está certo, é melhor adicionar outro campo para espalhar os dados melhor


3

Usar o endereço IP como chave primária é uma boa prática no scylla db?

Respondendo apenas à sua pergunta, assumindo endereços IP distribuídos uniformemente e seus padrões de acesso distribuídos uniformemente, é totalmente bom para qualquer banco de dados com compartilhamento de dados. Em muitos casos, quando suas distribuições não são muito uniformes, tudo ficará bem. por exemplo, seu padrão de acesso afeta alguns IPs mais do que outros.

Dependendo da estratégia de sharding do banco de dados, faz diferença se você ingerir valores crescentes monotonicamente (por exemplo, IPs seqüenciais) (MongoDB, Spanner, DataStore e etc). Porém, no caso do ScyllaDB, o Scylla faz o hash de cada chave de Partição com MurMurHash3 por padrão, portanto, você pode supor que a ingestão de dados seja distribuída uniformemente pelo token ring.

De qualquer forma, se você precisar ler / escrever por Key == IP, não terá muita escolha. No entanto, pode depender das especificidades da sua tarefa.

encontre alguns nós com muito mais carga (ocupam mais espaço em disco) do que outros, mesmo se as estatísticas do proprietário estiverem próximas (31% ~ 35%)

A carga geralmente mede a taxa de transferência que é IOPS do disco ou Solicitações de aplicativos / segundo ou utilização em%. Se você considerar a utilização do espaço em disco, é uma história totalmente diferente.

Se você quis dizer a utilização de nós de taxa de transferência relativa, pode ser por exemplo:

  • distribuição dos seus dados
  • distribuição de sua carga (acessos) no espaço de chave, a relação de leitura e gravação
  • distribuição dos tokens de nós, que podem fornecer% de variação apenas

Se você quis dizer espaço em disco, além do que mencionei, existem muitos outros fatores:

  • dicas
  • instâncias não reparadas, agendamento de reparos
  • lápides, gc, compactação

Gostaria de saber é porque eu estou usando o endereço IP como a chave primária

Não.

e alguns endereços IP são mais quentes que outros (como mais atualizações nesses IPs)?

Depende dos fatores mencionados acima e do que você quer dizer com carga. Se você quis dizer espaço em disco, seus acessos de leitura não o afetam. Escreve pode.


-1

Ter o endereço IP como chave primária é uma prática ruim por esses motivos.

  1. Os endereços IP podem mudar. se isso acontecer, não tenho certeza de como você pode consultar usando o endereço IP antigo.
  2. Se você tiver reservado um endereço IP (estático e sem alteração), se receber mais solicitações de poucos IPs, não estará criando nós distribuídos igualmente.
  3. Adicionar outro campo pode melhorar as coisas, no entanto, não posso recomendá-lo, a menos que conheça o padrão de acesso.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.