Welches ist der beste Primärschlüssel zum Speichern von Website-Adressen und Seiten-URLs?Der beste Primärschlüssel zum Speichern von URLs
Um die Verwendung der autoincremental ID zu vermeiden (die nicht wirklich an die Daten gebunden ist), entwarf ich das Schema mit der Verwendung einer SHA1-Signatur der URL als Primärschlüssel.
Dieser Ansatz ist in vielerlei Hinsicht nützlich: Ich brauche zum Beispiel die last_id nicht aus der Datenbank zu lesen, damit ich alle Tabellenaktualisierungen vorbereiten kann, um den Schlüssel zu berechnen und die eigentliche Aktualisierung in einer einzigen Transaktion durchzuführen. Keine Einschränkung der Beschränkung
Jedenfalls lese ich zwei Bücher, die mir sagen, dass ich falsch liege. In "Hochleistungs-MySQL" wird gesagt, dass der Zufallsschlüssel nicht gut für den DB-Optimierer ist. Außerdem sagt Joe Celko in seinen Büchern, dass der Primärschlüssel ein Teil der Daten sein sollte.
Die Frage ist: die natürlichen Schlüssel für URLs sind ... URLs selbst. Tatsache ist, dass für eine Website, die kurz ist (www.something.com), keine Beschränkung für eine URL besteht (siehe http://www.boutell.com/newfaq/misc/urllength.html).
Betrachten Sie, ich muss einige Millionen von ihnen speichern (und arbeiten).
Welches ist dann der beste Schlüssel? Autoincremental-IDs, URLs, Hashwerte von URLs?
Ich denke, es hängt viel davon ab, was Sie sonst noch mit diesen URLs, Zugangsmustern usw. tun. Die Verwendung von SHA1 sollte vor Kollisionen sicher sein, wo eine kürzere Hash-Funktion (zB CRC32) offensichtlich unpassend wäre. aber Kollisionen sind immer noch möglich, Sie hätten nur Pech. –