Ich arbeite an einer Anwendung, die im Web bereitgestellt wird. Ein Teil der App sind Suchfunktionen, bei denen das Ergebnis in einer sortierten Liste dargestellt wird. Die Anwendung richtet sich an Benutzer in mehreren Ländern, die unterschiedliche Ländereinstellungen verwenden (= Sortierregeln). Ich muss eine Lösung finden, um für alle Benutzer richtig zu sortieren.Strategie für Gebietsschema empfindliche Sortierung mit Paginierung
Ich sortiere derzeit mit ORDER BY in meiner SQL-Abfrage, so dass die Sortierung nach dem für die Datenbank festgelegten Gebietsschema (oder LC_LOCATE) erfolgt. Diese Regeln sind für Benutzer mit einem anderen Gebietsschema als dem für die Datenbank festgelegten falsch.
Um das Problem weiter zu komplizieren, benutze ich Paginierung in der Anwendung, also wenn ich die Datenbank abfrage, frage ich nach den Zeilen 1 - 15, 16 - 30 usw., abhängig von der Seite, die ich brauche. Da die Sortierung jedoch falsch ist, enthält jede Seite Einträge, die falsch sortiert sind. Im schlimmsten Fall kann das gesamte Ergebnis für eine bestimmte Seite in Abhängigkeit von den Gebietsschema-/Sortierregeln des aktuellen Benutzers nicht in Ordnung sein.
Wenn ich in (Server-Seite) Code sortieren würde, muss ich alle Zeilen aus der Datenbank abrufen und dann sortieren. Dies führt zu einem enormen Leistungseinbruch bei der Datenmenge. Daher möchte ich das vermeiden.
Hat jemand eine Strategie (oder sogar eine technische Lösung), um dieses Problem anzugehen, was zu korrekt sortierten Listen führt, ohne den Leistungseinbruch beim Laden aller Daten in Kauf nehmen zu müssen?
Tech Details: Die Datenbank ist PostgreSQL 8.3, die Anwendung eine EJB3 App mit EJB QL für die Datenabfrage, die auf JBoss 4.5 läuft.
PostgreSQL 8.4 (die aktuelle Version) unterstützt Gebietsschema Einstellungen pro Datenbank. Es ist alles andere als perfekt, aber es ist viel besser als 8.3. –