Eu estava lendo recentemente um artigo sobre como o Instgram costumava fragmentar seus IDs e eles usam uma função exclusiva para gerar IDs em seus servidores https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c
Mas fiquei curioso para saber se você poderia atribuir um fragmento a um usuário específico em vez de cada item e qual seria o desempenho. Especialmente em um site de grande escala.
Então, uma função semelhante à seguinte seria uma abordagem válida.
Assumindo uma tabela de usuários em um banco de dados dedicado exclusivamente para usuários.
Usuário - UID - nome - shardId
Onde shardId é calculado por meio de uma função que começa em 1 e para cada nova inserção seria incrementada - até um máximo de n (digamos 2048) para este exemplo. Em seguida, redefina para 1. Quase agindo como um round robin para distribuir os dados dos usuários entre os shards.
Haveria sérias implicações de desempenho para tal função, especialmente durante alta carga? Como colunas seriais, basta selecionar um nextval de uma sequência, não é? É apenas uma etapa extra de redefinir uma sequência quando ela atinge n. Ou estou latindo para a árvore errada?
Nem mesmo uma etapa extra porque o ciclismo é uma funcionalidade interna de sequências, consulte CREATE SEQUENCE .
Exemplo: