![]() |
CRC 64 bit
Hallo,
ich habe zig-Tausende Adressen (Name, Anschrift, tel, EMail) in einer Tabelle gespeichert. Ich muss nun sehr schnell feststellen, ob eine gegebene Adresse schon in der Tabelle exisitiert oder nicht. Dazu möchte möchte ich einen 64 bit Hashwert verwenden. Die Wahrscheinlichkeit, dass bei 1 Mio Adressen, zwei Adressen den gleichen Hashwert bekommen, liegt bei 1 zu 18 Billiarden; das ist mir sicher genug. Der Hashwert soll gleichzeitig auch das Primärschlüsselfeld werden. Wie soll ich nun den 64bit Hashwert errechnen? Aus 2 mal CRC32 (Funktionen wären vorhanden) bilden, oder MD5 berechnen und auf 64 bit "zusammenfalten oder eine spezielle CRC64 Funktion verwenden ? Wichtig: das Verfahren darf sich später nicht mehr ändern, da der Primärschlüssel als Fremdschlüssel in anderen Tabellen verwendet wird. |
Re: CRC 64 bit
Hi,
den hash als primary key zu verwenden finde ich nicht gut. Eine hohe Wahrscheinlichkeit der Eindeutigkeit macht einen hash nicht zum candidate key. Ich würde bei einem informationsfreien surrogate key bleiben und den hash zusätzlich speichern. Wenn du einen 64-bit hash brauchst, dann wirst du auch einen nehmen müssen. Einen basteln aus zwei 32-bit hashes oder durch Verstümmelung eines 128-bit hash geht nicht. Was da raus kommt ist kein hash. Warum musst du die Existenzprüfung für eine Adresse sehr schnell machen? Hast du schon über Erfassungsfehler nachgedacht? Du brauchst eine Kanonisierungsfunktion - hast du schon eine? Welche weitere Entscheidung hängt vom Ergebnis der Existenzprüfung ab? Die Änderung eines primary key ist mit DRI (cascade update) nicht soo problematisch. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz