Тёмный

ID Autoincremental o UUID para la clave primaria? qué opciones tenemos? 

NetMentor
Подписаться 19 тыс.
Просмотров 4,2 тыс.
50% 1

Aquí verás si para tu caso de uso es mejor utilizar un UUID o un Id autonumérico en la primary key de la base de datos
00:00 intro
00:20 Qué identificador utilizar en una base de datos?
04:09 Pros y contras de utilizar UUID o ID autonuméricos
12:23 Qué deberías utilizar como primary key
Si te gusta el contenido, puedes apoyar al canal invitandome a un café www.buymeacoffee.com/netmentor
Miembros premium del la coumunidad: www.netmentor.es/miembro-premium

Наука

Опубликовано:

 

5 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 28   
@NetMentor
@NetMentor 4 месяца назад
Blog : www.netmentor.es/entrada/primary-key-uuid-vs-autoid Twitter twitter.com/NetMentorTw
@facundovillalobo5181
@facundovillalobo5181 4 месяца назад
Excelente enfoque. En mi empresa actual estamos trabajando con un enfoque dual. Tenemos Ids autoincrementales como primary key y UUIDs para comunicacion entre sistemas
@blackbana
@blackbana 3 месяца назад
Me ha gustado mucho el vídeo. Da igual cuantos años lleve en esto, siempre se puedfe aprender perspectivas diferentes.
@abelgonzalezrengifo
@abelgonzalezrengifo 3 месяца назад
Este es un tema a tomar con mucho cuidado, el UUID puede ser la solución ideal en términos de portabilidad y seguridad, sin embargo, el términos de rendimiento en aplicaciones grandes, considera que incrementas sustancialmente el consumo de disco, por ende se aumenta la grabación y lectura de disco y el consumo de memoria de procesamiento, solo usaria UUID para temas de auditoria y para compartir información entre compañías.
@josephmoreno9733
@josephmoreno9733 4 месяца назад
La mejor opción es lo que dices de los dos pero hay varias precisiones. En algunos motores el UUID se almacena como un texto pero en la mayoria se almacena como un espacio binario de 16 bytes, o 128 bits. Y acá es donde el tamaño importa. Si cada caracter es ASCII, pesa 7 bits, y la representacion puede ser de 32 a 36 caracteres, tendias en total 32 * 7 bits (aunque por lo general se suelen utilizar mínimo 8bits -1 byte- por caracter), que es casi el doble de 128. Por otra parte, aunque la indexación es importante, no es lo mismo organizar texto que organizar números y esto es algo que la base de datos tendrá que hacer de forma autónoma o de vez en cuando obligarla a hacerlo en el mantenimiento de los mismos. Entiendo la parte de seguridad pero, como bien señala la solucion es que, una cosa puede ser lo que tengas en tu DB, otra lo que muestras en tu APP y otra muy distinta lo expones a los Consumers de esa APP. Pero hay algo muy importante que no se mencionó y es la fragmentación de las tablas y los índices. Y eso es un problema muy chungo que casi nadie le pone atención. Por eso es que puede ayudar mucho si la llave es secuencial. En SQL Server, tu puedes obtener incluso un UUID 'secuencial' para evitar el problema de la fragmentación pero eso es otro tema. Lo importante es ser consciente de esto que menciono y de que no es lo mismo organizar un índice a organizar el cluster de una tabla o una tabla sin cluster, y no es lo mismo tampoco leer y escribir en esos objetos. El tema se resume a que la identidad no necesariamente se da por la llave primaria, sino que puede darse por un índice único. Es decir, la llave primaria puede ser solo para organizar tus registros físicamente (si utilizas un cluster) garantizando la eficiencia a la hora de escribir y buscar registros. Pero, la identidad de ella puede ser otra cosa, algo más universal y largo, como un UUID. De hecho, siempre me he planteado el hecho que, no somos conscientes que la identidad de un registro sólo busca simplificar y reducir la densidad de la información de una tabla, es por eso que, no es la misma densidad de una tabla paramétrica a una transaccional, y esta densidad tambien se puede comparar entre tablas de igual categoría. Si pensamos en conjuntos: Profesiones < Personas, Pais < Ciudad < Lugares, Por este motivo tambien se piensa en numeros enteros. La información contenida en un conjunto, independiente de su información, se puede reducir a un espacio de 2^N donde N es el numero de bits. De este modo tenemos 256, 65536.. valores distintos. Y uno puede escoger el espacio en el que va a ubicar el conjunto de registros. Tu identidad es tu ADN (conjunto universal), pero en tu pais, pueden simplificarte dandote un número de identificación de ciudadano (subconjunto), pero si eres contribuyente te simplifican aún más (subconjunto del subconjunto), y así y así, te van catalogando en varios subconjuntos anidados haciendo que, identificarte inquivocamente en un conjunto sea más fácil. Basicamente en eso consisten las tablas de las DB relacionales. Se trata de identificar un registro en el conjunto (tabla) que corresponde. Incluso, yo en algun momento he discutido sobre la necesidad de tener autonuméricos negativos y comprender que el 0 no es ausencia de valor como se conciben en ORMs tipo EntityFramework. Y en cuanto a los UUID, entre más aleatorios sean, en realidad es mucho mejor, pero claro, deberán ser indexados y dichos índices tener mantenimiento constante para evitar la fragmentación.
@Jquint3ro
@Jquint3ro 4 месяца назад
hace un rato no te veia por cuestiones del trabajo pero cada video es una joya. Gracias por compartir tu conocimiento!
@pollo5422
@pollo5422 4 месяца назад
Tu contenido siempre es de calidad, te felicito y agradezco que lo compartas. Saludos desde Colombia.
@boraolim
@boraolim 2 месяца назад
Pues los UUID en cuestión de seguridad son más eficientes y los SQUID me convencieron completamente para implementarlos en Backend.
@denuxs
@denuxs 4 месяца назад
yo uso combinados ids autonumeri cos y uuid para no exponer valores y lo sqids esta interesante para ofuscar valores 😮 gracias por el tip
@wilmermolina9328
@wilmermolina9328 4 месяца назад
En SQL Server tiene el tipo de datos uniqueidentifier crea un NEWID desde el mismo motor de base.
@franzalbertomarino235
@franzalbertomarino235 4 месяца назад
una solucion alternativa que realize fue agregar un campo ExternalId que el cliente envia en la creacion, y para los get lo busco con el ExternaId, pero para las consultas con join trabajo con el id numerico.
@NetMentor
@NetMentor 4 месяца назад
eso puede ser una solución cuando tu cliente son clientes externos o servicios, pero si el cliente es la UI pues no lo es 😅
@leonardojavierrossi4399
@leonardojavierrossi4399 4 месяца назад
Muy bueno el video, excelente
@David_Llave
@David_Llave 4 месяца назад
Que bueno! Muy interesante el tema ! Saludos profe
@dahoradqhora
@dahoradqhora 4 месяца назад
Ecelente :)
@stevenlizarzaburupezua
@stevenlizarzaburupezua 3 месяца назад
Hay que ir con pinza si realmente van a usar GUID como primary Key y mas aun si las aplicaciones son altamente demandadas, el GUID puede ser seguro, sin embargo en cuanto a optimización no es lo más recomendable, GUID afecta considerablemente el rendimiento de tu base de datos
@davidleonardobernal61
@davidleonardobernal61 4 месяца назад
Piedes hacer un vídeo explicando los beneficios de usar el id compuesto. He visto ids con formato uuid::order::item siguiendo tu ejemplo, pero no veo el caso de uso
@NetMentor
@NetMentor 4 месяца назад
ninguno mas alla de que sea mas legible al ojo humano.
@emiliowildberger7151
@emiliowildberger7151 4 месяца назад
una webapi monolito con cliente wpf desktop , tambien se deberia ofuscar?
@armandosanchezsanchez9215
@armandosanchezsanchez9215 3 месяца назад
yo considero que si
@nicoxxxi
@nicoxxxi 4 месяца назад
Me da intriga como descubrieron que el alumno podía ver todas las notas, me imagino que alguien se enteró y le llegó a la empresa, si no por logs es casi imposible salvo que se la vean venir (que no era el caso)
@NetMentor
@NetMentor 4 месяца назад
uno de los colegios llamo diciendo que un alumno nos habia hackeado
4 месяца назад
Yo creo que el uso de UUID sólo es realmente necesario cuando se vayan a utilizar bases de datos distribuidas y evitar que colisionen las PK. Usar IDs por defensive programming es, en mi opinión, sobre ingeniería.
@JackCespedes
@JackCespedes 4 месяца назад
UUID es el ROWID de los '90
@jonathanvanegas5546
@jonathanvanegas5546 4 месяца назад
Otra alternativa seria usando el algoritmo HiLo no?
@Axantemir
@Axantemir 4 месяца назад
No me hace gracia el tema del UUID porque rompe la naturaleza de la base de datos, ya que hay que crearlo desde el código. Si tienes que importar datos a la base de datos, tendrías que crear primero todos los UUIDs por separado.
@lococba84
@lococba84 4 месяца назад
IDs ofuscados y a otra cosa jeje
@lortyaitor
@lortyaitor 4 месяца назад
Hoy en día casi todas las bbdd tienen una función para generar uuid. Yo por ejemplo utilizo sqlserver newid() y esto genera un uniqueidentifier
Далее
Aplicaciones con múltiples clientes
21:31
Просмотров 4,1 тыс.
This duo #UFC302
00:13
Просмотров 1,1 млн
Каха инструкция по шашлыку
01:00
Arquitectura Hexagonal: Una Introducción
9:44
Просмотров 1,7 тыс.
Patrón CQRS explicado FÁCIL en 10 minutos
19:52
Просмотров 22 тыс.
NET Aspire para el desarrollo local con .NET
30:20
Просмотров 6 тыс.
Apple watch hidden camera
0:34
Просмотров 54 млн
Избранное печатает...
0:11
Просмотров 71 тыс.