簡體   English   中英

服務器端對海量數據進行排序

[英]Server side sorting on huge data

截至目前,我們正在基於Dojo datagrid提供客戶端排序。 現在我們需要增強服務器端排序,這意味着排序應該應用於網格上的所有頁面。 我們在主表上連接了4個表,到目前為止有2個lac記錄,並且可能會增加。 執行SQL時,需要5-8分鍾的時間才能將所有記錄提取到我的Java代碼中,並且需要在其中應用一些計算,並且使用Comparators提供自定義排序。 我們有每個比較器代表每一列。

我擔心的是如何在短時間內將整個數據傳輸到服務層代碼? 有沒有辦法通過數據源配置來提高執行速度?

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;
                }
            };

您不應從數據庫中提取所有2 lac記錄到應用程序中。 您應該只獲取所需的內容。

正如您已經說過的,在主表上連接了4個表,您必須為其具有Hibernate實體類並在它們之間具有對應的映射。 使用分頁技術僅獲取要顯示給用戶的行數。 Hibernate知道使特定數據庫上有效工作的技巧。

您甚至可以在HQL中使用聚合函數: count(), min(), max(), sum(), and avg()來獲取相關數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM