Dois-je utiliser Oracle sys_guid() pour générer des guid?
J'ai quelques hérité de code qui appelle SELECT SYS_GUID() FROM DUAL
chaque fois qu'une entité est créée. Cela signifie que pour chaque insertion il y a deux appels à l'Oracle, l'un pour obtenir l' Guid
, et un autre pour insérer les données.
Je suppose qu'il peut y avoir une bonne raison pour cela, par exemple - Oracle Guid peut être optimisé pour la haute-volume insertions en étant séquentiel et ainsi, ils sont peut-être en essayant d'éviter l'excès d'arbre d'index de ré-équilibrage.
Est-il une raison pour utiliser SYS_GUID
par opposition à la construction de votre propre Guid
sur le client?
Puis-je mettre une manière différente? Vous ne devriez probablement pas construire votre propre GUID quand il y a une implémentation native. Ce n'est pas une raison pour utiliser
Je devrait être clair que toutes les langues que je connais qui sont utilisés sur le Client ont GUID types. Ainsi, un nouveau Guid en C# est créé par un Guid.NewGuid() et en java de la même est créé par l'UUID.ramdomUUID(). Quand je dis "de construire mon propre' je ne veux pas écrire des bouts de code, mais plutôt la création d'un nouveau Guid. Depuis les Guid sont garantis d'être unique, il ne devrait pas faire une différence quant à l'endroit où ils sont créés. La question ne concerne que l'avantage relatif de la création de votre Guid dans Oracle par opposition au client. Je sais qu'il y a (par programmation cher) façons de créer un guid dans Oracle sur insérer
sys_guid()
nécessairement bien. C'est beaucoup plus lent que d'utiliser une séquence et une crue de type de données, ce qui est plus gênant de travailler avec qu'un simple numéro. Si ce n'est que dans un DB pourquoi ne pouvez-vous pas simplement utiliser une séquence unique pour tout?Je devrait être clair que toutes les langues que je connais qui sont utilisés sur le Client ont GUID types. Ainsi, un nouveau Guid en C# est créé par un Guid.NewGuid() et en java de la même est créé par l'UUID.ramdomUUID(). Quand je dis "de construire mon propre' je ne veux pas écrire des bouts de code, mais plutôt la création d'un nouveau Guid. Depuis les Guid sont garantis d'être unique, il ne devrait pas faire une différence quant à l'endroit où ils sont créés. La question ne concerne que l'avantage relatif de la création de votre Guid dans Oracle par opposition au client. Je sais qu'il y a (par programmation cher) façons de créer un guid dans Oracle sur insérer
OriginalL'auteur cmdematos | 2012-08-08
Vous devez vous connecter pour publier un commentaire.
Pourquoi rouler votre propre si vous l'avez déjà fournis. Aussi, vous n'avez pas besoin de saisir en premier et ensuite insérer, vous pouvez simplement insérer:
Vous pouvez également l'utiliser comme valeur par défaut pour une clé primaire:
Ici il n'y a pas besoin de mise en place d'un avant déclencheur d'insertion à l'utilisation d'une séquence (ou dans la plupart des cas même se soucier de val1 ou comment sa peuplées dans le code).
Plus d'entretien pour des séquences aussi. Pour ne pas mentionner les problèmes de portabilité en cas de déplacement de données entre les systèmes.
Mais, les séquences sont plus conviviale de l'omi (à la recherche et à l'aide d'un nombre est mieux qu'un 32 hex version de la valeur brute, et de loin). Il peut y avoir d'autres avantages pour les séquences, je n'ai pas fait des comparaisons, vous pouvez exécuter des tests de performance en premier.
OriginalL'auteur tbone
Si votre préoccupation est de deux appels de base de données, vous devriez être en mesure d'appeler
SYS_GUID()
au sein de votreINSERT
déclaration. Vous pourriez même utiliser unRETURNING
clause d'obtenir la valeur que l'Oracle générée, ainsi que vous l'avez dans votre application pour une utilisation ultérieure.Je veux savoir si défendable motif à choisir d'avoir toutes vos Guid clés primaires créé sur le serveur, plutôt que sur le client.
Tout est défendable avec assez d'auto-illusion ;). Je dirais que vous êtes les bienvenus pour générer des Guid n'importe où sans que les gens en disant: vous l'avez fait "mal". Honnêtement, il y a certains cas où la création de Guid dans le client à faire sens. Si vous faites des charges en vrac, ou besoin de le Guid de la cohérence entre plusieurs tables ou des ensembles de données. Peut-être aussi, si vous êtes de travail entre les différentes bases de données, vous ne voulez pas créer de Guid dans chaque système de façon indépendante. Je ne sais pas ce que tu veux dire par "en programmant cher" si.
OriginalL'auteur Adam Hawkes
Je n'ai trouvé aucune raison pour générer un Guid à partir d'Oracle. L'aller-retour entre Oracle et le client pour chaque Guid est probablement plus lent que les occasionnels indice de rééquilibrage qui se produit est une valeur aléatoire à inserts.
OriginalL'auteur cmdematos
SYS_GUID peut être utilisé comme valeur par défaut pour une colonne de clé primaire, ce qui est souvent plus pratique que l'utilisation d'une séquence, mais note que les valeurs seront plus ou moins aléatoire et non séquentielle. Sur le côté positif, qui peuvent réduire la contention chaude blocs, mais sur le côté négatif de votre index inserts seront tous sur la place. Nous recommandons généralement à l'encontre de cette pratique.
de référence cliquez ici
OriginalL'auteur Smart003