Autowert Ersetzen durch GUIDs

Autowert Ersetzen durch GUIDs

am 13.07.2007 08:24:01 von Werner Bauer

Ich verwende üblicherweise Ids in jeder Tabelle, die als "autowert"=20
fortlaufend generiert werden. Funkt auch gut, und auch mit Replikation.=20
Wenn ich die Nutzer im Replikat lesen lasse, würde das natürlich auch=
=20
anstandslos gehen, aber die Einträge in Log- und Login-Dateien, die=20
durch Programme initiiert werden, verursachen Autowert-einträge und die=
=20
Replikation wird abbrechen, sobald im Master Einträge gleicher Werte=20
vorkommen.
Natürlich könnt' ich die zwei, drei Tabellen von der Replikatiuon=20
ausnehmen oder sonstwie 'rumprogrammieren, oder Log-Dateien hier und=20
dort unabhängig führen.
Lieber wär' mir aber ein Ersatz für Autowert, etwa so wie im=20
MS-SQL-Server, der, soweit ich mich erinnere, so etwas wie GUID's=20
vergibt, die üblicherweise nie kollidieren. Finde aber dazu keine=20
Möglichkeit im 5.1 Mysql ... vielleicht mit Trigger?

Werner

Re: Autowert Ersetzen durch GUIDs

am 13.07.2007 09:50:09 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Autowert Ersetzen durch GUIDs

am 13.07.2007 10:56:06 von Axel Schwenke

werner bauer wrote:

> Ich verwende üblicherweise Ids in jeder Tabelle, die als "autowert"
> fortlaufend generiert werden. Funkt auch gut, und auch mit Replikation.
> Wenn ich die Nutzer im Replikat lesen lasse, würde das natürlich auch
> anstandslos gehen, aber die Einträge in Log- und Login-Dateien, die
> durch Programme initiiert werden, verursachen Autowert-einträge und die
> Replikation wird abbrechen, sobald im Master Einträge gleicher Werte
> vorkommen.

Kannst du den letzten Halbsatz mal erklären? Warum sollte die
Replikation kaputt gehen? Schreibst du auf dem Slave?

> Natürlich könnt' ich die zwei, drei Tabellen von der Replikatiuon
> ausnehmen oder sonstwie 'rumprogrammieren, oder Log-Dateien hier und
> dort unabhängig führen.

Klingt wirklich so, als würdest du auf dem Master *und* auf dem
Slave in irgendwelche Log-Tabellen schreiben. Nur warum willst du
diese Tabellen dann überhaupt replizieren? Läßt du deine Syslogs
sich auch alle gegenseitig füttern?


Aber Abhilfen gibts in Menge:

- verwende verschieden benannte Log-Tabellen auf Master und Slave.
* pack sie in verschiedene Schemata oder
* leg verschiedene Basistabellen an und mach jeweils eine View
auf die "richtige" Basistabelle, dann schreib in die View
(oops, das wird erst mit RBR funktionieren)

- mach eine zusätzliche Spalte server_id in die Tabellen und leg
das AUTO_INCREMENT auf (server_id, running_id)

- repliziere die Log-Tabellen gar nicht erst. Wozu auch? Leg sie
am besten in eine eigene Datenbank und laß für diese Datenbank
gar kein Binlog schreiben.

- schreibe Logs in Files. So wird das seit der Computer-Steinzeit
gemacht und es ist angemessen. Ich habe noch nie ein schlüssiges
Argument gehört, warum Log-Tabellen *besser* sind als Log-Files.
Insbesondere wenn man die Nachteile von Tabellen berücksichtigt.

> Lieber wär' mir aber ein Ersatz für Autowert, etwa so wie im
> MS-SQL-Server, der, soweit ich mich erinnere, so etwas wie GUID's
> vergibt, die üblicherweise nie kollidieren.

Wenn dir 'üblicherweise' ausreicht:
nimm einen Zufallszahlengenerator.


XL

Re: Autowert Ersetzen durch GUIDs

am 13.07.2007 15:07:09 von Sven Paulus

Axel Schwenke wrote:
> Aber Abhilfen gibts in Menge:

Und natuerlich noch das Paerchen "auto_increment_increment" und
"auto_increment_offset" in der my.conf.

Re: Autowert Ersetzen durch GUIDs

am 13.07.2007 15:27:51 von Axel Schwenke

Sven Paulus wrote:
> Axel Schwenke wrote:
>> Aber Abhilfen gibts in Menge:
>
> Und natuerlich noch das Paerchen "auto_increment_increment" und
> "auto_increment_offset" in der my.conf.

Stimmt. Das naheliegendste übersieht man leicht ;-)


XL