Posted on 2010-03-30 11:55
FineReport——報表技術領跑者 閱讀(155)
評論(4) 編輯 收藏 所屬分類:
Java報表技術知識
靜態并發控制
應用服務器的承載能力是有限的,當并發的用戶數超過其承載能力,服務器肯定要出錯。因此,控制并發數的能力是必須的。
最常用的辦法是靜態并發控制,FineReport就提供了這樣的辦法,其基本思路是:在服務器端預先配置允許并發的最大線程數,當請求線程超出了這個數,就采用一種策略保證當前的線程數不超過最大線程數,同時保證等待的線程能進來計算,客戶端不會出現很大的延遲。
動態并發控制
當服務器對性能要求比較高的時候,光有靜態并發控制是不夠的。舉例來說,服務器限定了允許最大20個線程訪問,平均每個線程占用內存20m,總計服務器可以接受400M內存的耗用。可是,當正好每個線程訪問的報表數據量都非常小時,也許20個線程加起來耗用的內存不足100M,此時多余的300M內存就浪費了;如果正好20個線程中某幾個線程訪問的報表數據量非常大,有可能一個線程占用的內存就超過100M,此時20個線程加起來占用內存可能遠遠超過400M,直接導致服務器內存溢出。同樣的道理,對于CPU占用也是適用的。
因此,FineReport報表在提供簡單靜態并發數控制的基礎上,為了合理的資源分配,并保證服務器的安全和流暢性,同時引入了動態并發控制的概念。
根據服務器硬件和Java虛擬機的配置,在服務器運算的過程中,動態的判斷當前并發訪問的所占用的資源是否達到預設值,如果已經達到預設值,則控制新進訪問線程。
這種動態并發控制,和簡單的并發數控制結合使用,更加靈活,更加合理。
緩存報表執行結果
在并發訪問的機制下,經常出現同一報表被不同用戶連續多次重復訪問,此時如果能夠把第一次算出的報表緩存下來,再次訪問時直接從緩存中讀取,則可以大大減少服務器的運算消耗。并且因為節省了報表的執行過程,可以大大加快訪問速度。
對于帶有參數的報表,當用戶采用相同的參數進行重復訪問時,也可以利用緩存,減少重復的計算。對于帶有不同參數的報表會緩存不同的報表執行結果。因此如果第二次這第一次執行的參數不一樣,報表就會重新計算,并緩存該報表和參數對應的結果報表。因此,對于有參數的報表來說,緩存時還必須識別參數的值。
打開菜單:服務器|緩存設置,設置報表直接結果緩存參數,如下圖所示
