2013-10-29 79 views
0

截至目前,我们正在为Dojo数据网格提供客户端排序。现在我们需要增强服务器端排序意味着排序应该适用于网格上的所有页面。我们在主表上加入了4张表,并且现在有2个lac记录,并且可能会增加。当执行SQL时,需要5-8分钟的时间才能将所有记录提取到我的java代码中,并且需要对它们应用一些计算,并使用比较器提供自定义排序。我们有每个比较器来表示每一列。服务器端对大数据进行排序

我的担心是如何在短时间内将整个数据提供给服务层代码?有没有办法通过数据源配置来提高执行速度?

return new Comparator<QueryHS>() { 

       public int compare(QueryHS object1, QueryHS object2) { 
        int tatAbs = object1.getTatNb().intValue() - object1.getExternalUnresolvedMins().intValue(); 
        String negative = ""; 
        if (tatAbs < 0) { 
         negative = "-"; 
        } 
        String tatAbsStr = negative + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs/60)), 2) + ":" 
         + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs % 60)), 2); 
     //   object1.setTatNb(tatAbs); 
        object1.setAbsTat(tatAbsStr.trim()); 

        int tatAbs2 = object2.getTatNb().intValue() - object2.getExternalUnresolvedMins().intValue(); 
        negative = ""; 
        if (tatAbs2 < 0) { 
         negative = "-"; 
        } 
        String tatAbsStr2 = negative + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs2/60)), 2) + ":" 
         + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs2 % 60)), 2); 

      //   object2.setTatNb(tatAbs2); 
        object2.setAbsTat(tatAbsStr2.trim()); 
        if(tatAbs > tatAbs2) 
         return 1; 
        if(tatAbs < tatAbs2) 
         return -1; 
        return 0; 
       } 
      }; 
+0

你想一次获取并排序2个lac记录,或者有任何分页涉及? –

+0

如果您需要将其他数据加载到其他任何批量处理中,则会出现设计问题,而不是编程问题。 –

+0

@Debojit Saikia,是的我在客户端和服务器端都有分页。但是我需要在Java/Service层和应用排序上执行一些计算。之后,我必须向UI发送结果列表(此处为0到20个结果)。 – CHowdappaM

回答

0

您不应该从数据库中将所有2个lac记录提取到您的应用程序中。你应该只抓取需要的东西。

正如你所说你在主表上加入了4个表格,你必须为它们配备Hibernate实体类以及它们之间的相应映射。使用分页技术仅提取您向用户显示的行数。 Hibernate知道如何在特定的数据库上高效地工作。

您甚至可以使用集合函数:count(), min(), max(), sum(), and avg()和您的HQL来获取相关数据。

相关问题