2010-04-07 16 views
5

Estamos en el proceso de cambiar del generador guid aleatorio de C# Guid.NewGuid() al algoritmo guid secuencial sugerido en this post. Si bien esto parece funcionar bien para MS SQL Server, no estoy seguro de las implicaciones para las bases de datos Oracle, en las cuales almacenamos las guías en un campo sin formato (16). ¿Alguien tiene alguna idea de si este algoritmo sería bueno para la creación de guías secuenciales para Oracle, así como para MS SQL Server, o si se debe utilizar una variante diferente?GUIDs secuencial (peine) para Oracle

Gracias!

Respuesta

2

El uso de raw (16) parece ser un tipo de datos razonable para los GUID. El tamaño máximo para el tipo de datos sin procesar es de 2000 bytes y es compatible con Oracle 9i, 10g y 11.

También hay una función sql para generar GUID, se llama SYS_GUID. ver la documentación aquí->http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

Usted puede estar interesado en este artículo ->http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

+0

Gracias por su respuesta. Sin embargo, lo que busco no es si Raw es un buen tipo de datos para guids en Oracle, sino más bien si el algoritmo en cuestión provocará una fragmentación innecesaria del índice en Oracle, aunque parece ser una buena opción para MS SQL Server. Además, necesito generar mis guías en el cliente, por lo que la función SYS_GUID será de poca ayuda. – Eyvind

+0

¿Qué es exactamente la fragmentación innecesaria del índice? Por supuesto, los GUID se distribuirán (fragmentarán) a través de toda la sala de datos posibles. Para eso es GUID. La fragmentación de los datos es una propiedad inherente del algoritmo GUID, que la base de datos debe manejar, sin importar si se trata de un servidor sql u oráculo. La implementación del índice puede manejar esto, consulte -> http://en.wikipedia.org/wiki/B-tree –

+0

La idea es usar un algoritmo que genere * guiones * secuenciales, en lugar de la versión aleatoria estándar. – Eyvind

1

Cuando un bloque de índice es 'demasiado lleno' para una entrada más, es dividida.

Oracle tiene dos rutas, una optimizada para valores de estilo "secuenciales" y otra para valores de tipo "aleatorio". Si la nueva entrada está en el extremo derecho del índice, obtendrá una división 90-10. Si está en algún lugar en el medio, obtienes un 50-50. Si desea que los valores "nuevos" se agrupen en el índice, entonces un valor secuencial es útil. Si quiere que estén dispersos (por ejemplo, para evitar la contención en bloques 'calientes'), entonces es útil tener valores aleatorios.

Si la técnica es 'buena' para Oracle depende del problema que está tratando de resolver.

Cuestiones relacionadas