Weiter Off Topic
.
Bei uns gehts fast ausschließlich um BI, also ETL und Dashoards.
Dabei werden i.W. nur wenige Typen benötigt:
Date, varchar, int, bigint, double.
BLOB's spielen gar keine Rolle, da diese im Zweifel sowieso aufbereitet und verwertbare Daten extrahiert werden. Double hat sich trotz Ungenaugikeiten auch für Finanz-Dashboards bewährt und die berühmten 1-Cent-Differenzen treten auch nicht auf. Hinzu kommt die native Unterstützung für jedewede Berechnung durch die Hardware, die bei Decimal längst nicht so effektiv ist.
ETL-Prozesse erzeugen naturgemäß viele und große Satzversionen, da alte Daten entfernt und neue Daten hinzugefügt werden. Updates gibts i.W. nicht, Delete/Insert (via SQL-Bulk) ist die effektivste Methode.
Bei Abfragen wird ein SQL, der i.W. durch Klick-Methoden in einem Designer modelliert wird, analysiert und es werden sogar dynamisch Indizes erstellt.
Diese werden beim ETL dann deaktiviert und hinterher aktiviert, was immer noch zwischen 10.000 und 25.000 Inserts/Sekunde (je nach Anzahl Spalten) ermöglicht.
Beim Query werden die Daten ebenso auch aggregiert, bevor sie an das Dashboard übergeben werden. Der Group by, automatisch generiert, kann da schon mal 50 Spalten umfassen. Via der Caches kommen dann trotzdem noch zwischen 15.000 und 30.000 Zeilen/Sekund als Result zurück.
Beim Laden der Dashboards wird je Tabelle ein paralleler Query (die 2.5 im Classic-Mode, je Query 1 Prozess) ausgeführt. Wobei Tabelle da zu enschränkend ist, da auch hier ein Modell mit zig Joins (1-255) möglich ist. So 3-10 ist da die Regel.
Und wenn alle Queries durch sind werden diese im Web gecached um eine 2. oder weitere ähnliche Abfragen nicht zu wiederholen.
Anschließend sind alle Verbindungen wieder zu.
Durch eine eigene Poolverwaltung werden nicht mehr Queries erzeugt als CPU's vorhanden sind und ansonsten halt gequeued. So lassen sich durchaus einige 100 User über einen Server behandeln.