A partir de 4D 20 R10, los UUIDs ahora son generados directamente utilizando un algoritmo interno en lugar de depender de las funciones del sistema, dándole un mejor control sobre su formato y comportamiento. Con esta actualización, ahora puede optar por los UUIDs de la versión 7, que soportan ordenación cronológica. Exploremos lo que esto significa para sus aplicaciones.
Entender las versiones de UUID
Todos los UUID comparten el mismo formato: 128 bits representados por 32 caracteres hexadecimales (0-9 + A-F). Sin embargo, pueden codificar distintos tipos de información. El RFC 9562 define actualmente ocho versiones de UUID. Internamente, un UUID se almacena en dos enteros de 64 bits, lo que hace que la comparación, consulta y ordenación sean extremadamente eficientes en las unidades centrales de 64 bits. Los caracteres hexadecimales son sólo un formato de visualización, internamente no se utilizan en absoluto.
Hasta ahora, 4D dependía de las funciones sistema para generar UUIDs. Estas funciones no permitían elegir o incluso saber qué versión se utilizaba. En la práctica, normalmente producían UUIDs de la versión 4, completamente aleatorios.
Con la reciente evolución de la RFC, se introdujo la versión 7. La cual integra una marca de tiempo, lo que permite ordenar los UUID por hora de creación. Muchos de ustedes solicitaron soporte para UUIDv7 en el foro 4D Feature Request, ¡y estamos felices de ofrecerlo en 4D 20 R10!
LA Versión 4 aún por defecto
Para asegurar la consistencia y compatibilidad, 4D continúa utilizando los UUIDs de la versión 4 por defecto. Sin embargo, 4D ya no confía en las funciones del sistema para generar UUIDs, sino que ahora los calcula internamente. Esto ayuda a prevenir cualquier cambio inesperado debido a futuras actualizaciones del sistema.
Y si desea aprovechar la ordenación cronológica de la versión 7, ahora puede activarla, ya sea a través de la configuración o del código.
¿Qué hace especial a la versión 7?
Los UUID de la versión 7 comienzan con una marca de tiempo Unix Epoch, lo que permite ordenarlos cronológicamente. Esto resulta especialmente útil durante el desarrollo o la depuración, cuando se desea que los registros recién creados aparezcan en la parte superior (o inferior) de un list box.
Dado que la versión 7 utiliza una precisión de microsegundos, ofrece una granularidad más fina que el comando tradicional Timestamp tradicional, que se limita a milisegundos.
Nota: si se crean varios registros en el mismo microsegundo, compartirán la misma parte de la marca de tiempo. Sin embargo, sus UUID seguirán siendo únicos gracias a los bytes aleatorios adicionales. Ordenar esos registros específicos puede no tener sentido, pero ordenarlos junto a otros sigue siendo útil. En la práctica, la creación de registros suele tardar más de un microsegundo, por lo que este caso es poco frecuente.
NuevO PARÁMETRO para UUID automáticos de la versión 7
La activación de la versión 7 para los UUID autogenerados es simple. Basta con abrir el cuadro de diálogo Parámetros de estructura, ir a la página Base de datos > Almacenamiento de datos y seleccionar la versión de UUID deseada.

Una vez activada la versión 7, todos los UUID autogenerados, como los utilizados para las llaves primarias, seguirán el nuevo formato.
Los UUID existentes en su base de datos no se modificarán para mantener la coherencia. Y como la diferencia entre las versiones 4 y 7 es interna (no estructural), ambos formatos pueden coexistir sin problemas.
Generar UUID de la versión 7 en código
El comando Generate UUID también ha sido actualizado para soportar la versión 7. Solo tiene que especificar la versión como parámetro. Muy sencillo, ¿verdad?
Y si falta el parámetro, la versión utilizada por defecto sigue siendo la 4, para mantener la coherencia de su código.
var $uuid : Text
$uuid :=Generate UUID // v4: 578BFEC987BD4C11AE8AB9CD3DC12DD0
$uuid :=Generate UUID(4) // v4: C2BE4B6723634DBE9F4387B1226A4B4F
$uuid :=Generate UUID(7) // v7: 0198C7A4E41A7B6CB39F460873165D30
$uuid :=Generate UUID(7) // v7: 0198C7A543557F89AA7D83563AB5C97E
He aquí una rápida comparación de los resultados anteriores:
- Los UUID de la versión 4 son totalmente aleatorios.
- Los UUID de la versión 7 comparten un prefijo común (marca de tiempo), con aleatoriedad al final.
Esperamos que esta nueva funcionalidad le brinde más flexibilidad y control sobre sus desarrollos. Como siempre, estamos escuchando sus comentarios y evolucionando 4D para satisfacer sus necesidades.
¡Feliz programación!
