私はWeb上にデプロイされているアプリケーションに取り組んでいます。アプリの一部は、結果がソートされたリストに表示される検索機能です。このアプリケーションは、さまざまなロケール(=並べ替えルール)を使用して、いくつかの国のユーザーを対象としています。すべてのユーザーを正しく並べ替えるための解決策を見つける必要があります。
現在、SQLクエリでORDER BYを使用して並べ替えているため、データベースに設定されているロケール(またはLC_LOCATE)に従って並べ替えが行われます。これらのルールは、データベースに設定されているロケールとは異なるロケールを持つユーザーには正しくありません。
また、問題をさらに複雑にするために、アプリケーションでページ付けを使用しているため、データベースにクエリを実行するときに、必要なページに応じて1〜15、16〜30行などを要求します。ただし、並べ替えが間違っているため、各ページには誤って並べ替えられたエントリが含まれています。最悪のシナリオでは、現在のユーザーのロケール/並べ替えルールによっては、特定のページの結果セット全体が乱れる可能性があります。
(サーバー側の)コードを並べ替える場合は、データベースからすべての行を取得してから並べ替える必要があります。これにより、データ量を考えると、パフォーマンスが大幅に低下します。したがって、私はこれを避けたいと思います。
すべてのデータをロードするというパフォーマンスの打撃を受けることなく、正しくソートされたリストをもたらすこの問題を攻撃するための戦略(または技術的な解決策)を持っている人はいますか?
技術的な詳細:データベースはPostgreSQL 8.3であり、アプリケーションはデータクエリにEJB QLを使用するEJB3アプリであり、JBoss4.5で実行されます。