2009-09-18 5 views
0

Je travaille sur un projet que je veux avoir être aussi flexible et évolutive possible dès le début. Un problème qui me préoccupe est celui décrit par Joshua Schacter dans Fondateurs au travail, qui l'a noté comme un détail qu'il aurait prévu à l'avance.ID des informations sur plus d'un DB/Server

La mise à l'échelle d'une machine, d'une base de données, est très difficile, même avec la réplication. Les outils qui sont là ne sont pas tout à fait raison.

Par exemple, lorsque vous ajoutez des choses à une table et les chiffres, cela signifie que vous ne pouvez pas avoir une deuxième machine en ajoutant à eux parce que les chiffres vont entrer en collision. Donc que fais-tu? Vous devez trouver une façon complètement différente de le faire.

Avez-vous un serveur central qui distribue des jeux numériques ou inventez-vous avec quelque chose qui est pas de chiffres? Utilisez-vous des nombres aléatoires et espérez-vous qu'ils ne s'entrechoquent jamais? Quoi qu'il en soit, les ID attribués automatiquement ne volent pas.

Quelqu'un at-il ici face à ce problème? Quels sont les moyens d'aller au-delà des ID auto-incrémentés, ou y a-t-il un moyen de les faire évoluer avec plusieurs serveurs?

Répondre

2

Utilisez GUID/UUID (identificateur unique globalement/universellement). En théorie, il est garanti d'être unique sur plusieurs machines.

1

GUIDs, vos chances de collision sont astronomiquement faibles.

Il est également possible d'avoir (ce que nous avons appelé) SmartGUIDs (communément appelées COMB GUIDS - voir this analysis, en particulier page 7) où vous pouvez encoder un horodatage dans le GUID, vous obtenez des informations de la date de création de l'enregistrement « gratuitement » - si Vous pouvez enregistrer une colonne d'horodatage pour le datetime de création d'enregistrement - qui récupère une partie de ce que vous avez perdu en passant de l'entier 32 bits au GUID 128 bits. Ceux-ci peuvent également être garantis être monotones, contrairement aux GUID réguliers, qui peuvent être utiles pour les index clusterisés et pour le tri.

Vous pouvez également utiliser les touches composites avec une sorte de serveur/db ID avec une identité auto-incrément régulier ou automatique numéro.

Questions connexes