Rob van Wijk hat endlich mal wieder einen Artikel veröffentlicht. Darin liefert er eine Lösung für das Problem der Verteilung von Tabellen stark unterschiedlicher Größe in gleichgroße Gruppen (wobei Größe einfach die Anzahl an Bytes ist). Aufgrund der deutlichen Größenunterschiede genügt es nicht, die Tabellen einfach über Modulo n Gruppen zuzuordnen, da dabei die erste Gruppe sehr viel größer werden würde als die n-te. Seine Lösung verwendet daher eine Model clause und folgende Vorgehensweise:
- order all tables by size in descending order
- place the N largest tables in groups 1 .. N
- iterate over the tables with a non-empty size in descending order and add the table to the first group encountered whose size is below the running average size of the groups
- iterate over the empty tables and add the table to the first group encountered whose total number of tables is below the average number of tables per group
Wie bei Verwendung der Model clause üblich, ist das verwendete SQL alles andere als intuitiv - jedenfalls für mich - , aber effektiv.
In einem Nachtrag zum Artikel verweist der Herr van Wijk dann noch auf einen ähnlichen Artikel im Blog von Brendan Furey, der mir bisher komplett entgangen war, und der eine wahre Fundgrube für SQL-Lösungen zu klassischen Optimierungsproblemen darstellt (etwa zum Travelling Salesman Problem). Dabei liefern die Artikeln nicht nur komplexe SQL-Lösungen, sondern auch sehr hübsche grafische Visualisierungen zu den Fragestellungen. Wenn ich mal wieder an die Grenzen meiner algorithmischen Möglichkeiten komme, wäre das ein guter Platz zum Suchen.
Keine Kommentare:
Kommentar veröffentlichen