Randomisierung des automatischen Inkrements in MySQL

8

Wir haben eine Datenbank, in der wir Daten in die Tabelle einfügen, wenn wir eine Bestellung von unseren Diensten erhalten.

Wir verwenden auto_increment, um die ID zu generieren und die Bestellung mit derselben zuzuweisen. Dies ist normalerweise überall gleich.

Das Problem ist jedoch, dass diese Informationen, da sie an Drittanbieter weitergegeben werden, nachverfolgen können, wie viele Bestellungen wir pro Tag erhalten. Durch Senden einer Anfrage am frühen Morgen und Senden einer weiteren Anfrage um Mitternacht und Zählen der Differenz in der ID.

Dies gibt Einblicke in unsere Dienstleistungen. Da es sich um ein etwas komplexes System handelt, können wir keine komplexen Operationen ausführen, die dies zufällig bestimmen können.

Meine ursprüngliche Idee ist es, auto_incrementZahlen auf bit-zufällige Weise zu generieren .

1,2,3,4,5,67,68,69,70,71,133,134,135,136,137,189,190,191,192,193,194

Ich denke, es sollte einfach sein, da MySQL keinen Cache mehr hat. Generieren Sie die nächste Sequenz, indem Sie eine Zufallszahl anhängen.

Wie kann dies erreicht werden, ohne die Leistung zu beeinträchtigen?

Reddy
quelle
Welche Informationen geben Sie genau weiter? Nur die IDs? Wenn diese Anbieter beliebige Abfragen an die Datenbank senden können, können sie diese Informationen jederzeit ausführen SELECT * FROM Orders;oder SELECT COUNT(*) FROM Orders WHERE Date >= CURRENT_DATE();abrufen.
Ypercubeᵀᴹ
Möglicherweise können Sie versuchen, UUIDstattdessen od zu verwenden Auto_Increment.
Abdul Manaf
@ypercube, sie haben keinen Zugriff auf die Datenbank. Ich werde die Auftragsbestätigung mit der generierten ID senden. Da wir jeden Tag mehr als 0,1 Millionen Operationen ausführen, können wir UUID auch nicht verwenden, da es sehr groß sein kann und unsere Kundenbetreuung nicht antworten kann
Reddy
3
Aha. Jeder dieser Anbieter kann sich daher nur anhand der IDs seiner Bestellungen ein Bild über die Größe der Bestellungen eines Tages machen. Ich denke, dass das Hinzufügen einer UUID-Spalte (und das Ausblenden der tatsächlichen ID vor Anbietern) Ihre beste Option sein könnte. Die Kundenbetreuung kann weiterhin Dinge mit einer wahrscheinlich geänderten Abfrage überprüfen (also anhand der UUID und nicht anhand der ID). Dies erfordert nur eine neue Spalte und einen Index. Und (ich nehme an, Sie verwenden InnoDB) möchten Sie den Clustered-Index IDaktiviert lassen und alle FKs der anderen Tabelle unberührt lassen.
Ypercubeᵀᴹ

Antworten:

5

Hier ist eine Übersicht über Methoden zum Generieren zufälliger eindeutiger IDs in MySQL von Rick James: http://forums.mysql.com/read.php?24,425424,425491

Die Übersicht ist ziemlich umfangreich, gibt 5 verschiedene Strategien, listet Vor- und Nachteile für jede auf.

Hln
quelle