Seite 1 von 1
Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 19:27
von mutetella
Hallo,
nun ja, ich gebe ja zu, dass das mal wieder so 'ne Frage ist...
Also: Irgendwie muss ich ja auf meine Termine zugreifen. Jetzt denke ich mir, dass doch eine ID, die ich so
Code: Alles auswählen
>>> new_id = max(allocated_ids) + 1
>>> allocated_ids.add(new_id)
erstelle für den Zugriff auf einen Termineintrag eindeutig genug sein müsste. Oder gibt es einen Grund, weshalb ich sowas wie `uuid.uuid4()` verwenden sollte?
mutetella
Re: Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 19:35
von BlackJack
@mutetella: Das kommt darauf an ob eine ID nur innerhalb Deines Programms auf einem Rechner bzw. bei einem Benutzer gültig sein soll/muss, oder ob man Termine auch Im-/Exportieren können soll. Soll es möglich sein einen Termin aus Kalendar A zu exportieren und auf einem anderen Rechner in Kalendar B zu importieren, ohne das sich die ID ändert, zum Beispiel damit man den gleichen Termin noch einmal importieren kann und bei B bemerkt wird, dass man den schon hat, dann möchte man so etwas wie eine UUID verwenden.
Re: Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 19:46
von mutetella
@BlackJack: Aber muss ich nicht in beiden Fällen prüfen, ob die (UU)ID bereits vergeben wurde? Ich meine, kann es nicht sein, dass super duuper zufällig ein Termin auf Rechner A dieselbe UUID erhält wie auf Rechner B? Oder kann das mit `uuid.uuid1`, das ja auch systemspezifische Dinge mit einbezieht, eher sehr selten passieren?
mutetella
Re: Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 20:13
von snafu
@mutella: Zur Absicherung für diesen höchst unwahrscheinlichen aber möglichen Fall kannst du bei übereinstimmenden IDs nochmal die beiden Objekte vergleichen. Dann hast du einerseits eine schnelle Vorprüfung (anhand der ID) und andererseits die Garantie, dass es keine "False Positives" gibt. An der Tatsache, dass dann 2 unterschiedliche Termine exakt die selbe ID hätten, ändert das natürlich nichts.
Re: Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 21:45
von BlackJack
@mutetella: Lies Dir mal das RFC zu UUID durch wie die sich zusammensetzen. Die Chancen für eine Kollision sind *sehr* klein. Bei Variante 1 müssten zwei Rechner die selbe MAC-Adresse haben und zur selben Zeit (maximale Auflösung Nanosekunden) die selbe „clock sequence” erzeugen, also letztendlich eine Zufallszahl die 14 Bit lang ist (16384 Möglichkeiten). Bei Variante 4 hat man 122 Zufallsbits, also 5316911983139663491615228241121378304 Möglichkeiten.
Der Vergleich des Termins den snafu vorschlägt kann man im Grunde nicht machen, weil Kalendarsoftware üblicherweise für den gleichen Termin nicht zwingend die gleichen Daten annimmt. Man kann ja einen Termin in A erstellen, nach B exportieren, und dort dann ändern. Wenn man A und B nun erneut abgleicht, sollte die Software anhand der ID feststellen, dass es sich um den selben Termin handelt, und den Benutzer zum Beispiel fragen welcher Inhalt der aktuellere ist. Oder man speichert auch das Modifikationsdatum in dem Datensatz und übernimmt den zuletzt geänderten.
Re: Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 22:20
von snafu
Wir wissen aber doch gar nicht, auf welcher Datengrundlage die ID entsteht bzw wann 2 Termine als gleich angesehen werden sollen. Oder habe ich was verpasst? Insofern wollte ich auch kein konkretes Vorgehen vorschlagen, sondern mich mehr allgemein zum Thema IDs äußern...
Re: Fortlaufende Nummerierung als ID ausreichend?
Verfasst: Samstag 14. Dezember 2013, 22:50
von BlackJack
@snafu: Ich ging halt davon aus was man da so üblicherweise macht. VCalendar was so ziemlich jede Kalendarsoftware Im- und Exportieren kann kennt ein UID-Feld was eine UUID ist und an der die Programme in der Regel die Identität festmachen. Anders geht das doch auch gar nicht wirklich weil man ohne eine eindeutige globale ID pro Termin nicht weiss welche man schon importiert oder abgeglichen hat und welche nur gleich oder ähnlich aussehen.