Nilson15 6 Denunciar post Postado Novembro 17, 2013 Olá galera, eu queria saber se é seguro e aplicável utilizar o uniqid() do php para gerar ids únicos para serem utilizados como chave primaria em bancos de dados, tendo também em vista que se tratará de um site de muito acessos, processamento e muitas informações a serem armazenada no banco de dados. Eu queria utilizar tal método para não me limitar a um numero x máximo de registros com id's diferentes e também para não haver conflitos. Muito obrigado Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 17, 2013 pode ser usado sim amigo. Mas também pode ser usando um campo id do tipo int auto_increment e chave primaria. Compartilhar este post Link para o post Compartilhar em outros sites
Nilson15 6 Denunciar post Postado Novembro 18, 2013 Sim mais se utilizado o tipo bigint para a chave primaria ainda sim a mesma seria limitada, e para tabelas em banco de dados em que há muito fluxo nos dados como a inserção e apagamento dos registros, com poucos anos poderia sim se esgotar as possibilidades, até porque caso seja criado 100 registros, o contador de incremento do mysql daria continuação a sequencia incrementando assim o 100 ou seja não há a renovação de id pois o contador segue uma sequencia de incremento que somente vai enfrente. Já no caso do uniqid() do php, digamos que ele provavelmente não irá criar ids iguais por 100 anos, mas se caso o ciclo de ids iniciar novamente com a definição de ids semelhantes, todos esses registros seriam apagados ao decorrer o tempo não havendo limite assim e sem a possibilidade de conflito. Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Novembro 18, 2013 pode ser usado sim amigo. Mas também pode ser usando um campo id do tipo int auto_increment e chave primaria. Cuidado com campos auto_increment. Imagine 2 users criando um novo registro ao mesmo tempo :upset: Compartilhar este post Link para o post Compartilhar em outros sites
Nilson15 6 Denunciar post Postado Novembro 18, 2013 exato Marcos Xavier, já é um motivo a mais para não se utilizar o auto_increment Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 18, 2013 Nunca tive problema com o mesmo, olhe que o site que fiz e de grande porte, e sem nenhum problema até hoje. :D Mas já que vocês tem mais conhecimento do que eu. Então utilize o uniqid(). Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Novembro 18, 2013 Sim mais se utilizado o tipo bigint para a chave primaria ainda sim a mesma seria limitada, e para tabelas em banco de dados em que há muito fluxo nos dados como a inserção e apagamento dos registros, com poucos anos poderia sim se esgotar as possibilidades, até porque caso seja criado 100 registros, o contador de incremento do mysql daria continuação a sequencia incrementando assim o 100 ou seja não há a renovação de id pois o contador segue uma sequencia de incremento que somente vai enfrente. Já no caso do uniqid() do php, digamos que ele provavelmente não irá criar ids iguais por 100 anos, mas se caso o ciclo de ids iniciar novamente com a definição de ids semelhantes, todos esses registros seriam apagados ao decorrer o tempo não havendo limite assim e sem a possibilidade de conflito. Na boa, se você estourar um bigint unsigned em "poucos anos", o tamanho do número vai ser o menor dos seus problemas. Compartilhar este post Link para o post Compartilhar em outros sites
Nilson15 6 Denunciar post Postado Novembro 18, 2013 Sim sei disso Evando, mas eu não penso que usar o bigit possa ter somente isso como problema, por exemplo uma tabela que armazena as informações de emails enviados para validação de processos como recuperações de contas e validação de emails, no caso do Google, ele possui muitos usuários, e imagina quantas inserções a tabela não irá receber em 10 anos? É claro que uma hora os ids vai chegar ao numero máximo possível mesmo os registros sendo apagado depois de validar, o que aconteceria se isso acontecesse? E paulinhosupriano, eu não me considero uma pessoa com mais conhecimento do que você, mas acho por certo encontrar as soluções cabíveis ao que pode ser um problema, mas sendo ele em teoria impossível de acontecer, é notável que tudo pode e é vulnerável, mas é dever de nos que programamos ou criamos qualquer coisa procurar alcançar a perfeição inexistente até que se acabe as possibilidades. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Novembro 19, 2013 Sim sei disso Evando, mas eu não penso que usar o bigit possa ter somente isso como problema, por exemplo uma tabela que armazena as informações de emails enviados para validação de processos como recuperações de contas e validação de emails, no caso do Google, ele possui muitos usuários, e imagina quantas inserções a tabela não irá receber em 10 anos? É claro que uma hora os ids vai chegar ao numero máximo possível mesmo os registros sendo apagado depois de validar, o que aconteceria se isso acontecesse? E paulinhosupriano, eu não me considero uma pessoa com mais conhecimento do que você, mas acho por certo encontrar as soluções cabíveis ao que pode ser um problema, mas sendo ele em teoria impossível de acontecer, é notável que tudo pode e é vulnerável, mas é dever de nos que programamos ou criamos qualquer coisa procurar alcançar a perfeição inexistente até que se acabe as possibilidades. Não chega porque quem tem movimento paga suporte/manutenção pra isso. Se você está tendo que cuidar sozinho de uma infra desse tipo, acho bom você repensar o valor cobrado, buscar uns cursos e - principalmente - contratar mão-de-obra auxiliar. Bancos de dados possuem ferramentas para otimização de dados fragmentados que aumentam a performance de consultas num banco depois de muitas inclusões e algumas exclusões a menos. Se o seu bigint estourar em 10 anos, daqui a 10 anos você desfragmenta e aumenta em um byte o tamanho do campo. Você troca a infra por um hardware 10 anos mais novo, 10 anos mais potente, você vai ter 10 anos de estudo a mais, teremos 10 anos de tecnologia e possibilidades disponíveis. Possivelmente, pelo dinheiro que você paga hoje nessa infra, você consegue que uma consulta realizada através de um campo varchar, que sequer seja um índice, numa tabela 2 vezes maior, na metade do tempo. Compartilhar este post Link para o post Compartilhar em outros sites
lex21 2 Denunciar post Postado Novembro 19, 2013 amigo, é melhor e mais recomendado que se gere o id direto no banco de dados por auto_increment, não pelo php. Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Novembro 19, 2013 Só complementando a resposta do Evandro no post #9 (que foi excelente por sinal, pra vc), pense também em particionamento de tabela. Se você já sabe os pontos onde seu volume pode aumentar, o particionamento permitirá uma maior flexibilidade na hora de colocar seus dados em uma espécie de "arquivo morto", também realizar backup's incrementais e também colocar as partições mais usadas em tablespaces diferentes (que permite colocar as partições mais usadas em discos de maiores capacidades/poder de processamento). Exemplo: você pode dar prioridade em partições de dados dos 3 últimos meses, e todo o resto em um volume que não tem tanto acesso. @braços Compartilhar este post Link para o post Compartilhar em outros sites
Nilson15 6 Denunciar post Postado Novembro 20, 2013 Então lex21, eu já utilizei bastante o mysql mas ultimamente eu estou utilizando o PostgreSQL e nele não há auto_increment então o que eu poderia estar fazendo para utilizar o bigint com o auto_increment nele? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 20, 2013 #12 http://www.postgresql.org/docs/8.3/static/datatype-numeric.html Compartilhar este post Link para o post Compartilhar em outros sites