Instagrams Postgres-Methode zum Implementieren benutzerdefinierter IDs für das Sharding ist großartig, aber ich brauche die Implementierung in MySQL.
Also habe ich die Methode am Ende dieses Blogs konvertiert, hier: Ссылка
MySQL-Version:
%Vor%Die Tabelle sieht ungefähr so aus:
%Vor%Frage:
Ich habe versucht, eine neue Tabelle zu erstellen, z. "tablename_seq", mit einer Zeile, einem Zähler, um meine eigenen auto_increment Werte zu speichern, dann Aktualisierungen an dieser Tabelle im TRIGGER, aber das Problem ist, dass ich die Tabelle in einer Stored Procedure (trigger) nicht LOCKEN kann, also habe ich die Genau dasselbe Problem, ich kann nicht garantieren, dass ein Zähler zwischen Triggern einzigartig ist: (.
Ich bin ratlos und würde mich über Tipps freuen!
Mögliche Lösung:
Die folgende SQL Fiddle generiert eine Ausgabe wie folgt:
%Vor%Akzeptieren Sie die Antwort, wenn sie Ihre Bedürfnisse wirklich löst.
AKTUALISIEREN
%Vor%Siehe db-fiddle .
Eine Alternative besteht darin, Blöcke mit Autoinkrement-Nummern zu erfassen. Wenn Sie MySQL automatisches Inkrementinkrement auf etwas wie 1000 setzen, Ein Prozess kann ein Einfügen in die Tabelle "Sequenz" ausführen und den Wert für die automatische Erhöhung abrufen. Der Prozess weiß dann, dass er über 1000 fortlaufende Nummern verfügen kann, beginnend mit dieser Nummer, die frei von Konflikten ist. Sie müssen nicht jedes Inkrement in einer zentralen Tabelle aufzeichnen, wenn Sie nur eine Nummer aufnehmen.
Dies wird am häufigsten in mehreren Master-Setups zusätzlich zum Auto-Inkrement-Offset verwendet. Sie könnten auch die Mehrfachmaster-Route verwenden und die verschiedenen Master einfügen. Die automatische Inkrementinkrementierung und -verschiebung würde keine Konflikte sicherstellen. Dies würde fundiertes Wissen über die MySQL-Replikation erfordern.
Tags und Links triggers mysql instagram auto-increment sharding