2010-12-10 7 views
0

Ich entwerfe eine Datenbank (SQLite, SQL Server und DB2), in der eine Tabelle ein 32kB-Blob enthält, das eindeutig sein muss. Die Tabelle enthält in der Regel etwa 20.000 Zeilen.Erzwingen der Eindeutigkeit für große Datenbankfelder (BLOB)

ich von zwei Lösungen denken kann,

1 - Machen Sie den Blob einen eindeutigen Index.

2 - Berechnen Sie einen Hash-Index des Blobs, verwenden Sie diesen als nicht eindeutigen Index und schreiben Sie Code, der die Eindeutigkeit des Blobs erzwingt.

Lösung 1 ist sicherer, aber ist der Speicherplatzbedarf und die Leistungseinbußen schlecht genug, um Lösung 2 zu einer besseren Wahl zu machen?

Antwort

1

Ich würde mit # 2 gehen, teilweise als eine platzsparende Maßnahme, aber mehr, weil einige DBMS Indizes auf LOBs nicht erlauben (Oracle kommt in den Sinn, aber das kann eine alte Einschränkung sein).

Ich würde wahrscheinlich zwei Spalten erstellen für Hash-Werte, MD5 und SHA1 (beide häufig in Client-Sprachen unterstützt). Fügen Sie dann einen eindeutigen zusammengesetzten Index hinzu, der diese zwei Spalten abdeckt. Die Wahrscheinlichkeit einer Kollision auf beiden Hashes ist infinitesimal klein, insbesondere angesichts Ihrer erwarteten Tabellengrößen. Sie sollten jedoch immer noch eine Wiederherstellungsstrategie haben (was so einfach sein kann, wie einen der Werte auf 0 zu setzen).

+0

Thx! Ihre Ausarbeitung über zwei Hashes war am wertvollsten! – Batibix

Verwandte Themen