對於大資料量的使用者顯示,
b/s程式幾乎清一色的使用分頁的方式呈現,一般的,這種方式下使用者會檢視前幾頁的資料,當仍然沒有找到他所需要的資料時,他會選擇重新查詢。
在c/s下的程式中,使用分頁方式,受到了一些挑戰:
一方面,老的滾動條給使用者留下了較好的體驗,在任何介面下都照搬分頁的方式顯示,會給客戶很不好的印象;
其次,c/s下的應用大多面向商業客戶,這些程式涉及到成千上萬的資料應用,事實上,大多數的資料量並不大,加上良好的事先條件(例如最近一周的訂單),資料量往往不大,但因為分頁的緣故,使用者哪怕在300條記錄的情況下,也要翻動五六下才能看見他的資料;
另外,由於分頁的緣故,必然影響瀏覽時的sql語句,以適應分頁的需求,給程式的編寫帶來極大的複雜,而且最重要的是分頁將本來就繁重的sql變的更加緩慢,在erp應用中,許可權的條件已經很複雜了,如果再加上分頁(我們使用的是雙top加倒序的方式),sql執行緩慢無比,比單純的sql慢的不是乙個級別。
那麼如何較好的解決這些問題呢?
首先,從源頭開始抓,即預設給使用者盡可能少資料量的查詢,例如,在產品設計中,使用「我的訂單」,或者是「最近一周需要處理的訂單」,對於基礎檔案類的資料,可以盡量在瀏覽的左邊安排乙個分類樹,以便僅顯示此分類的資料。
其次,建立虛擬資料的方式,以便使用**的方式展現大資料,他的原理是:
建立乙個類,實現了ilist介面;
**控制項的繫結一般使用ilist介面,其中count和this[int index]是必須實現的方法,count我們可以通過獲取所有id的列表,得知總數,而實際的資料通過下面的**性快取技術獲取;
第一次獲取查詢的所有id列表,然後根據**的請求,**性的獲取對應的資料。下面是部分演示**:
通過這種方法,我在sqlserver下的測試,伺服器的複雜非常的小,在10萬筆記錄下,基本上在1秒左右看見資料,滾動資料時基本上沒有延遲。
當然,當前的實現還有需要改善的地方:
- 瀏覽時,實現讀取的id已經被刪除,當滾動此資料後,要使次行空白或自動消失;
- 可以考慮首頁並不獲取所有id,而是top 100資料,當使用者滾動資料時,才載入所有id列表,這種設計主要是考慮翻頁的概率很低,讀取所有id有些浪費,其次,對於資料量小於100的資料,實際執行了2次sql,沒有必要;
- 使用者很無聊,拖動滾動條看遍所有資料,快取的資料不斷增加,應該考慮快取的最大值,將舊的快取刪除;
- 在使用者對連續的資料進行頻繁的讀取時,考慮自動增加每次的讀取總數。
此方案給使用者的體驗是很好的,但可不是完美無缺的,他無法適應以下情況:
- 查詢的結果是複雜的分組彙總查詢,沒有可以參考的id列表,這樣情況無法處理;
- 必須關閉**控制項的排序、分組和過濾功能,因為這些功能將促使**訪問所有的資料。
和**控制項繫結的**:
void button2_click(
object sender, eventargs e)
大資料量的處理
其實這個問題老是在面試的時候提到 1。建立專門的彙總表 這個表一般是每天晚上做統計處理 建立索引 索引的話,插入和修改會變慢,也是只做統計原因之一 用來查詢,如果量非常大,那麼分表,還是大,那麼分庫,就是資料倉儲概念了 2。關聯表查詢 多表聯合查詢 的大資料,首先就是1 把多個表做成乙個統計表,或者...
大資料量mysql檔案匯入程式
phymyadmin data importer www.ebugs.org 用來快速mysql的大資料備份 使用前請首先按照 注釋修改要匯入的sql檔名 資料庫主機名 資料庫使用者名稱 密碼 資料庫名 同時將資料庫檔案和本文本一起ftp導 目錄,然後以web方式訪問此檔案即可 file name ...
C WCF大資料量傳輸解決方案
文章內容列表 1 場景 2 解決方案 3.wcf契約與服務實現設計靜態圖 4.wcf契約與服務實現設計詳細說明 6.服務端啟動服務 7.客戶端 1 場景 wcf在網路傳輸中,大資料量傳輸造成網路阻塞,寬頻無法承受 2 解決方案 解決wcf在網路傳輸中的大資料量問題 a 需要把相關資料序列化成位元組流...