2010-07-12 4 views
2

En utilisant un alphabet comme "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", je voudrais générer des codes de 2 à 4 lettres pour identifier les entrées de banque de données uniques. J'ai une fonction python capable de le faire une fois passée une liste indiquant les positions des lettres du dernier code [7,17,11] -> "7GA". le code suivant peut être fait en incrémentant cet élément le plus à droite et en le portant lorsque la longueur de l'alphabet est dépassée.App Engine Code non numérique unique

Cette méthode a l'avantage de garder les codes courts, séquentiels, cohérents, faciles à communiquer et de voir comment je les veux. Je me demande cependant si cela fonctionnerait sur le moteur de l'application puisque la fonction doit conserver ou être passée le dernier identifiant pour imposer l'unicité qui ne peut pas bien jouer avec la nature non continue de l'infrastructure de Google. D'autres moyens d'y arriver ou des arguments raisonnés contre cela sont les bienvenus.

Répondre

5

Si vous êtes lié au fait que les codes soient séquentiels, vous devez disposer d'un seul objet compteur verrouillé transactionnellement et incrémenté chaque fois qu'une nouvelle entité est créée. L'argument contre cela est que vous vaincre l'un des principaux avantages d'App Engine: la concurrence. À moins que votre application n'ait un besoin spécifique d'identifiants séquentiels, c'est une mauvaise idée. Si vous laissez les ID attribués automatiquement par App Engine, ils seront non séquentiels, mais vous pouvez convertir l'entier de et vers la base 36 en l'affichant à l'utilisateur. Here's a python function pour convertir un entier en et à partir de bases arbitraires.

+0

Je vois la valeur en utilisant les identifiants standard et en les convertissant/codant simplement pour les URL. –

2

Cela serait difficile à utiliser tel quel sur le moteur de l'application car de nombreuses copies de votre application pourraient être exécutées en même temps. Chaque copie aurait besoin d'accéder au "dernier identifiant" et être capable de le mettre à jour de manière atomique. Cela nécessiterait probablement trop de frais généraux, sauf si vous avez seulement besoin de générer de nouveaux ID de cette manière plutôt rarement. Pourquoi ne pas utiliser les ID numériques intégrés de GAE?

Pourquoi ne pas utiliser les ID numériques intégrés de GAE? Ils sont garantis d'être uniques et sont également faciles à communiquer. Ils sont également généralement séquentielle et croissante, bien que ce ne soit pas garanti.