Debo usar Oracle sys_guid() para generar guid?

Tengo algunas heredadas de código que llama a SELECT SYS_GUID() FROM DUAL cada vez que crea una entidad. Esto significa que por cada inserción hay dos llamadas de Oracle, para conseguir el Guid, y otro para insertar los datos.

Supongo que puede ser una buena razón para esto, por ejemplo – Oracle Guid puede ser optimizado para alto volumen de inserciones por ser secuencial y por lo que tal vez están tratando de evitar la excesiva índice de árbol de re-equilibrio.

Hay una razón para usar SYS_GUID como oposición a la construcción de su propio Guid en el cliente?

Puedo decirlo de otra manera? Usted probablemente no debería construir su propio GUID cuando hay un nativo de la aplicación. Esa no es una razón para usar sys_guid() necesariamente, aunque. Es mucho más lento que el uso de una secuencia y es una materia de tipo de datos, que es más molesto que un simple numbre. Si esto es sólo en una DB ¿por qué no puedes simplemente usar una sola secuencia para todo?
Yo debería estar claro que todas las lenguas que conozco, que son utilizados en el Cliente han GUID tipos. Así, un nuevo Guid en C# es creado por Guid.NewGuid() y en java el mismo es creado por UUID.ramdomUUID(). Cuando digo ‘construir mi propio’ no me refiero a escribir páginas y páginas de código, sino la creación de un nuevo Guid. Desde Guid están garantizados para ser único, no se debe de hacer una diferencia en la que se crearon. La pregunta se refiere sólo a la relativa ventaja de la creación de su Guid en Oracle en comparación con el cliente. Sé que hay (a través de programación caros) formas de crear el guid de Oracle en insertar

OriginalEl autor cmdematos | 2012-08-08

4 Kommentare

  1. 7

    ¿Por qué lanzar su propio si usted ya ha proporcionado a usted. Además, no es necesario tomar primero y, a continuación, insertar, sólo puede insertar:

    create table my_tab
    (
    val1 raw(16),
    val2 varchar2(100)
    );
    
    insert into my_tab(val1, val2) values (sys_guid(), 'Some data');
    commit;

    También se puede utilizar como un valor predeterminado para una clave principal:

    drop table my_tab;
    create table my_tab
    (
    val1 raw(16) default sys_guid(),
    val2 varchar2(100),
    primary key(val1)
    );

    Aquí no hay necesidad de establecer un antes desencadenador de inserción para utilizar una secuencia (o en la mayoría de los casos, incluso preocuparse por val1 o cómo su poblado en el código).

    Más de mantenimiento para las secuencias también. Por no hablar de los problemas de portabilidad cuando el movimiento de datos entre los sistemas.

    Pero, son las secuencias más favorable al ser humano de la omi (observando y utilizando un número es mejor que un 32 hex versión de un valor crudo, por ahora). Puede haber otros beneficios a las secuencias, no he hecho ningún extensas comparaciones, puede que desee ejecutar algunas pruebas de rendimiento de primera.

    Gracias. Entiendo los beneficios relativos de las secuencias más Guid. Uno de estos beneficios es que las claves primarias, especialmente agrupado las claves primarias se benefician de datos secuenciales (no necesariamente un número entero/numérico de tipo secuencial) debido a que los algoritmos están optimizados para evitar btree de reequilibrio. Al parecer es difícil/imposible hacer lo mismo con ramdom de datos como la de nuestro GUID. Sin embargo, sys_guid() se ve bastante secuencial, aunque la secuencia de ‘en medio’ de la guid. De ahí la pregunta.

    OriginalEl autor tbone

  2. 4

    Si su preocupación es la de dos llamadas de base de datos, usted debería ser capaz de llamar SYS_GUID() dentro de su INSERT declaración. Usted puede incluso utilizar una RETURNING cláusula para obtener el valor que Oracle generados, por lo que usted tiene en su aplicación para su uso posterior.

    Gracias, las dos llamadas son una de mis preocupaciones. Sé que puede generar el Guid junto con la inserción, pero esto es a través de programación caro.
    Quiero saber si un defendible razón existe para optar por tener toda su Guid claves principales creado en el servidor, en lugar de en el cliente.
    Nada es defendible con la suficiente auto-engaño ;). Yo diría que son bienvenidos a generar Guid en cualquier lugar sin que la gente que dice que se hizo «mal». Honestamente, hay algunos casos en los que la creación de los Guid en el cliente de sentido. Si usted está haciendo las cargas a granel, o de la necesidad de la Guid coherente entre varias tablas o conjuntos de datos. Quizás también si usted está trabajando entre diferentes bases de datos, puede que no desee crear Guid en cada sistema de forma independiente. No sé a qué te refieres por «a través de programación caro».

    OriginalEl autor Adam Hawkes

  3. 1

    He encontrado ninguna razón para generar un Guid de Oracle. El viaje entre el Oráculo y el cliente para cada Guid es probablemente más lento que el ocasional índice de reequilibrio que se produce es el valor aleatorio inserta.

    OriginalEl autor cmdematos

  4. 1

    SYS_GUID puede ser utilizado como un valor por defecto para una columna de clave principal, que a menudo es más conveniente que el uso de una secuencia, pero se nota que los valores serán más o menos al azar y no secuencial. En el lado positivo, que puede reducir la contención para el agua caliente bloques, pero en el lado negativo el índice inserta será por todo el lugar así. Se recomienda en general en contra de esta práctica.

    de referencia haga clic aquí

    OriginalEl autor Smart003

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea