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
Werner Bauer [ Fr, 13 Juli 2007 08:24 ] [ ID #1767599 ]

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
Andreas Kretschmer [ Fr, 13 Juli 2007 09:50 ] [ ID #1767603 ]

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
Axel Schwenke [ Fr, 13 Juli 2007 10:56 ] [ ID #1767604 ]

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.
Sven Paulus [ Fr, 13 Juli 2007 15:07 ] [ ID #1767620 ]

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
Axel Schwenke [ Fr, 13 Juli 2007 15:27 ] [ ID #1767623 ]
Datenbanken » de.comp.datenbanken.mysql » Autowert Ersetzen durch GUIDs

Vorheriges Thema: Einträge über ein Feld mit Array Inhalt finden
Nächstes Thema: Nur ganz bestimmte Zeilen selektieren