Eu tenho uma tabela que potencialmente terá elevado número de inserções por segundo, e eu estou tentando escolher um tipo de chave primária que eu quero usar. Para fins ilustrativos, digamos, é tabela de usuários. Eu estou tentando escolher entre usar GUID e BIGINT como chave primária e, finalmente, como UserID em todo o aplicativo. Se eu usar GUID, eu salvar uma viagem ao banco de dados para gerar um novo ID, mas GUID não é user-friendly e não é possível particionar a tabela por este ID (que eu estou planejando fazer). Usando BIGINT é muito mais conveniente, mas gerá-la é um problema - eu não posso usar a identidade (há uma razão fro isso), então minha única opção é ter alguma tabela auxiliar que deverá conter último ID utilizado e, em seguida, eu chamo isso proc armazenado:
create proc GetNewID @ID BIGINT OUTPUT
as
begin
update HelperIDTable set @ID=id, id = id + 1
end
para obter o novo id. Mas, então, esta tabela auxiliar é um gargalo óbvio e eu estou preocupado com quantas atualizações por segundo que pode fazer.
Eu realmente gosto da idéia de usar BIGINT como pk, mas o problema gargalo me preocupa - há uma maneira de estimar aproximadamente quantos de id poderia produzir por segundo? Eu percebo que depende altamente de hardware, mas existem limitações físicas e qual o grau que estamos olhando? 100 do / s? 1000 / seg?
Todas as ideias sobre a forma de abordar o problema são muito apreciados! Este problema não me deixa dormir por muitos noite agora!
Obrigado! Andrey