我在一个部署在网络上的应用程序上工作。该应用程序的一部分是搜索功能,其中结果显示在排序列表中。该应用程序针对使用不同语言环境(= 排序规则)的多个国家/地区的用户。我需要为所有用户找到正确排序的解决方案。
我目前在我的 SQL 查询中使用 ORDER BY 进行排序,因此排序是根据为数据库设置的语言环境(或 LC_LOCATE)完成的。对于那些区域设置与数据库设置不同的用户,这些规则是不正确的。
此外,为了使问题进一步复杂化,我在应用程序中使用了分页,所以当我查询数据库时,我会根据我需要的页面询问第 1 - 15、16 - 30 行等。但是,由于排序错误,每个页面都包含排序错误的条目。在最坏的情况下,给定页面的整个结果集可能会乱序,具体取决于当前用户的区域设置/排序规则。
如果我要对(服务器端)代码进行排序,我需要从数据库中检索所有行然后排序。考虑到数据量,这会导致巨大的性能损失。因此,我想避免这种情况。
有没有人有策略(甚至技术解决方案)来解决这个问题,这将导致正确排序的列表而不必承受加载所有数据的性能损失?
技术细节:数据库是 PostgreSQL 8.3,应用程序是一个 EJB3 应用程序,使用 EJB QL 进行数据查询,在 JBoss 4.5 上运行。