Autowert Ersetzen durch GUIDs
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.
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.
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. Finde aber dazu keine
Möglichkeit im 5.1 Mysql ... vielleicht mit Trigger?
Werner
Re: Autowert Ersetzen durch GUIDs
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
werner bauer <werner__bauer [at] hotmail.com> 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
Axel Schwenke <axel.schwenke [at] gmx.de> 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
Sven Paulus <sven [at] karlsruhe.org> wrote:
> Axel Schwenke <axel.schwenke [at] gmx.de> 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