Leiden am Freitag

Bei meinen letzten zwei Leiden kamen gleich mehrere Problematiken zusammen. Der Verständlichkeit wegen hier noch die ganze Vorgeschichte dazu:

Alles fing damit an, dass ich für eine grosse Tabelle mit ~1.6 Mio. Records im SQL Server einen Volltextindex angelegt habe. Da die importierten Daten nicht über einen dafür erforderlichen "single row unique identifier" (eine Spalte als PK) verfügte, nahm ich eine zusätzliche Spalte mit einem autoincrement Wert zur Hilfe. Zu solch speziellen Daten gelangt man im übrigen, indem man verschiedene Fileserver auf vergebene Berechtigungen scannt. Benutzer, Gruppen, Verzeichnisnamen, Laufwerke, Servername - alles ist in Fülle mehrfach vorhanden... aber soweit, so gut. Die Daten der Tabelle werden täglich neu importiert, wodurch folglich auch der Index täglich aktualisiert werden muss. Und hier gings los...
Ein vollständige Neuindizierung dauerte gut 4h und war somit als Lösung für den Dauerbetrieb unbrauchbar. Auch ein Auslagern des Volltextindexes auf eine, unabhängige Disk brachte keine spürbare Verbesserung. Eine Analyse der Importdaten ergab mir dann aber, dass sich täglich nur ein paar hundert der Datensätzte änderten. Würde ich also die indizierte Tabelle nur updaten anstelle eines radikalen Neuimports, würde eine differenzielle Neuindizierung des Index reichen. Ich erstellte also eine zweite Tabelle und leitete den täglichen Import dort hinein. Nun stellte sich mir das Problem wie man eine Tabelle updaten kann, ohne dass sie über einen brauchbaren primary key verfügt.

Nachdem sich zunächst lange keine brauche Lösung abzeichnete, kam sie dann gleich im Zweierpack daher. Der erste Ansatz führte über die Funktion checksum() dazu, dass ich einen PK erstellen konnte, der für die Kombination der erwähnten Felder einzigartig war:

Hashwerte mittels checksum eindeutiger machen

Da ich aber nicht recht glücklich war mit der Lösung (und weil fast eben nie ganz ist) verfolgte ich noch einen weiteren Ansatz der dann endgültig zum Erfolg führte:

Zwei Tabellen abgleichen ohne unique identifier

Print | posted @ Friday, August 11, 2006 12:34 PM