Quelle est votre opinion sur l'utilisation des Uuid comme ligne de base de données des identifiants, en particulier dans les applications web?

J'ai toujours préféré utiliser des entiers longs que les clés primaires dans les bases de données, de la simplicité et de la (supposée) de la vitesse. Mais lors de l'utilisation d'un RESTE ou de Rails-comme le schéma d'URL pour les instances de l'objet, je ne puis la fin avec l'Url comme ceci:

http://example.com/user/783

Et alors l'hypothèse est qu'il existe aussi des utilisateurs avec des Id de 782, 781, ..., 2 et 1. En supposant que la web app en question est suffisamment sécurisé pour empêcher les gens d'entrer d'autres numéros pour afficher d'autres utilisateurs sans autorisation, une simple séquentiellement attribué clé de substitution aussi les "fuites" le nombre total de cas (plus de celui-ci), dans ce cas, les utilisateurs, ce qui pourrait être à l'information privilégiée. (Par exemple, je suis utilisateur #726 en stackoverflow.)

Serait un UUID/GUID être une meilleure solution? Ensuite, j'ai pu configurer les Url comme ceci:

http://example.com/user/035a46e0-6550-11dd-ad8b-0800200c9a66

Pas exactement succinct, mais il y a moins implicite des informations sur les utilisateurs sur l'écran. Bien sûr, c'est un bel exemple de la "sécurité par l'obscurité", ce qui n'est pas un substitut pour une bonne sécurité, mais il semble au moins un peu plus sécurisé.

Cet avantage est-il en vaut le coût et la complexité de la mise en œuvre des Uuid pour le web-adressable instances de l'objet? Je pense que j'avais encore envie d'utiliser les colonnes de type entier en tant que base de données PKs juste pour accélérer les jointures.

Il y a aussi la question de la représentation de la base de données des Uuid. Je sais MySQL stocke sous forme de 36 chaînes de caractères. Postgres semble plus efficace de la représentation interne (128 bits?) mais je n'ai pas essayé moi-même. Quelqu'un a une expérience avec cela?


Mise à jour: pour ceux qui ont posé la question simplement en utilisant le nom d'utilisateur dans l'URL (par exemple, http://example.com/user/yukondude), qui fonctionne très bien pour des instances d'objets dont les noms sont uniques, mais quid des zillions de web app objets qui peuvent vraiment être identifié par un numéro? Les commandes, les transactions, les factures, copie de l'image noms, stackoverflow questions, ...

InformationsquelleAutor yukondude | 2008-08-08