É possível calcular a quantidade de memória e partições necessárias para sua configuração específica.
Para dimensionar a memória necessária, carregue os dados do seu aplicativo em uma única JVM. Quando o uso do heap alcança 60%, observe o número de objetos que são utilizados. Este número é a contagem máxima recomendada de objetos para cada uma de suas Java Virtual Machines. Para obter o dimensionamento mais exato, utilize dados realistas e inclua quaisquer índices definidos em seu dimensionamento porque os índices também consomem memória. A melhor forma de dimensionar o uso da memória é executar a saída verbosegc da coleta de lixo pois esta saída fornece os números após a coleta de lixo. É possível consultar o uso do heap em qualquer ponto específico por meio de MBeans ou programaticamente, porém essas consultas fornecem apenas uma captura instantânea atual do heap. Essa captura instantânea pode incluir lixo não coletado, portanto, usar esse método não indica precisamente a memória consumida.
numShardsPerPartition = 1 + total_number_of_replicas
Quantidade de Java Virtual Machines (valor minNumJVMs)
Para escalar sua configuração, primeiro, decida o número máximo de objetos necessários a serem armazenados no total. Para determinar a quantidade de Java Virtual Machines que precisa, use a seguinte fórmula:minNumJVMS=(numShardsPerPartition * numObjs) / numObjsPerJVM
Arredonde este valor para cima para o valor de número inteiro mais próximo.Quantidade de shards (valor numShards)
No tamanho de crescimento final, use 10 shards para cada JVM. Conforme descrito anteriormente, cada JVM possui um shard principal e (N-1) shards para as réplicas, ou neste caso, nove réplicas. Como você já possui uma quantidade de Java Virtual Machines para armazenar os dados, você pode multiplicar a quantidade de Java Virtual Machines por 10 para determinar a quantidade de shards:numShards = minNumJVMs * 10 shards/JVM
Número de partições
Se uma partição tiver um shard primário e um shard de réplica, então a partição possui dois shards (principal e de réplica). O número de partições é a contagem de shards dividido por 2, arredondado para o número primo mais próximo. Se a partição possui um primário e duas réplicas, então, o número de partições é a contagem de shards dividida por 3, arredondada para o número primo mais próximo.numPartitions = numShards / numShardsPerPartition
Iniciando a Configuração
Com base nos cálculos anteriores, inicie com 250 Java Virtual Machines e cresça até 500 Java Virtual Machines ao longo de cinco anos. Com essa configuração, é possível gerenciar o crescimento incremental até chegar ao número final de entradas.Nessa configuração, cerca de 200.000 entradas são armazenadas por partição (500 milhões de entradas dividido por 2503 partições). Configure o parâmetro numberOfBuckets no mapa que mantém as entradas para o número primo maior mais próximo, que neste exemplo é 70887, o que mantém a proporção por volta de três.
Quando o número máximo de Java Virtual Machines é atingido
Quando atingir o número máximo de 500 Java Virtual Machines, sua grade de dados ainda poderá crescer. À medida que o número de Java Virtual Machines aumenta além de 500, a contagem de shards começa a diminuir abaixo de 10 para cada JVM, que está abaixo do número recomendado. Os shards começam a ficar maiores, o que pode causar problemas. Repita o processo de dimensionamento considerando novamente um crescimento futuro e reconfigure a contagem da partição. Esta prática requer um reinício completo da grade de dados, ou uma ocorrerá uma interrupção da sua grade de dados.