WEB Service 下實現大資料量的傳輸
)直接返回DataSet物件
特點:通常元件化的處理機制,不加任何修飾及處理;
優點:程式碼精減、易於處理,小資料量處理較快;
缺點:大資料量的傳遞處理慢,消耗網路資源;
建議:當應用系統在內網、專網(區域網)的應用時,或外網(廣域網)且資料量在KB級時的應用時,採用此種模式。
示例如下:
程式碼- [WebMethod(Description ="直接返回 DataSet 物件。")]
- public DataSet GetNorthwindDataSet()
- {
- tring sql ="SELECT * FROM XT_TEXT";
- SqlConnection conn =new
- conn.Open();
- SqlDataAdapter dataadapter =new SqlDataAdapter(sql, conn);
- DataSet ds =new DataSet();
- dataadapter.Fill(ds, "XT_TEXT");
- conn.Close();
- return ds;
- }
客戶程式呼叫方法
- privatevoid button1_Click(object sender, EventArgs e){
- /com.dzbsoft.www是上面Web Service釋出後的名稱空間
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now; DataSet dataSet = ds.GetNorthwindDataSet();
-
this.label1.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin); binddata(dataSet);
(2) 返回DataSet物件用Binary序列化後的位元組陣列
特點:位元組陣列流的處理模式;
優點:易於處理,可以中文內容起到加密作用; 缺點:大資料量的傳遞處理慢,較消耗網路資源; 程式碼- [WebMethod(Description ="返回 DataSet 物件用 Binary 序列化後的位元組陣列。")]
- publicbyte[] GetDataSetBytes()
- {
- DataSet dataSet = GetNorthwindDataSet();
- BinaryFormatter ser =new BinaryFormatter();
- MemoryStream ms =new MemoryStream();
- ser.Serialize(ms, dataSet);
- byte[] buffer = ms.ToArray();
- return buffer;
- }
客戶程式呼叫方法:
程式碼- privatevoid button2_Click(object sender, EventArgs e)
- {
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now;
- byte[] buffer = ds.GetDataSetBytes();
- BinaryFormatter ser =new BinaryFormatter();
- DataSet dataSet = ser.Deserialize(new MemoryStream(buffer)) as DataSet;
- this.label2.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin) +""+ buffer.Length;
- binddata(dataSet);
- }
(3) 返回DataSetSurrogate物件用Binary序列化後的位元組陣列
特點:微軟提供的開源元件; 優點:易於處理,可以中文內容起到加密作用; 缺點:大資料量的傳遞處理慢,較消耗網路資源; 示例如下: 程式碼- [WebMethod(Description ="返回 DataSetSurrogate 物件用 Binary 序列化後的位元組陣列。")]
- publicbyte[] GetDataSetSurrogateBytes()
- {
- DataSet dataSet = GetNorthwindDataSet();
- DataSetSurrogate dss =new DataSetSurrogate(dataSet);
- BinaryFormatter ser =new BinaryFormatter();
- MemoryStream ms =new MemoryStream();
- ser.Serialize(ms, dss);
- byte[] buffer = ms.ToArray();
- eturn buffer;
- }
- privatevoid button3_Click(object sender, EventArgs e)
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now;
- byte[] buffer = ds.GetDataSetSurrogateBytes();
- BinaryFormatter ser =new BinaryFormatter();
- DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;
- DataSet dataSet = dss.ConvertToDataSet();
- this.label3.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin) +""+ buffer.Length;
- binddata(dataSet);
- }
(4)返回DataSetSurrogate物件用Binary序列化並Zip壓縮後的位元組陣列
特點:對位元組流陣列進行壓縮後傳遞; 優點:當資料量大時,效能提高效果明顯,壓縮比例大; 缺點:相比第三方元件,壓縮比例還有待提高; 建議:當系統需要進行大資料量網路資料傳遞時,建議採用此種可靠、高效、免費的方法。 示例如下: 程式碼- [WebMethod(Description ="返回 DataSetSurrogate 物件用 Binary 序列化並 Zip 壓縮後的位元組陣列。")]
- publicbyte[] GetDataSetSurrogateZipBytes()
- {
- DataSet dataSet = GetNorthwindDataSet();
- DataSetSurrogate dss =new DataSetSurrogate(dataSet);
- BinaryFormatter ser =new BinaryFormatter();
- MemoryStream ms =new MemoryStream();
- ser.Serialize(ms, dss);
- byte[] buffer = ms.ToArray();
- byte[] zipBuffer = Compress(buffer);
- return zipBuffer;
- }
- publicbyte[] Compress(byte[] data)
- {
- try
- {
- MemoryStream ms =new MemoryStream();
- Stream zipStream =null;
- zipStream =new GZipStream(ms, CompressionMode.Compress, true);
- zipStream.Write(data, 0, data.Length);
- zipStream.Close();
- ms.Position =0;
- byte[] compressed_data =newbyte[ms.Length];
- ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
- return compressed_data;
- }
- catch
- {
- returnnull;
- }
- }
- }
客戶程式呼叫方法:
程式碼- privatevoid button4_Click(object sender, EventArgs e)
- {
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now;
- byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();
- byte[] buffer = UnZipClass.Decompress(zipBuffer);
- BinaryFormatter ser =new BinaryFormatter();
- DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;
- DataSet dataSet = dss.ConvertToDataSet();
- this.label4.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin) +""+ zipBuffer.Length;
- binddata(dataSet);
- }
- privatevoid binddata(DataSet dataSet) {
- this.dataGridView1.DataSource = dataSet.Tables[0];
- this.label5.Text = "共計:" + dataSet.Tables[0].Rows.Count + "條記錄";
- 客戶端UnZipClass程式
- publicstaticclass UnZipClass
- {
- publicstaticbyte[] Decompress(byte[] data)
- {
- try
- {
- MemoryStream ms =new MemoryStream(data);
- Stream zipStream =null;
- zipStream =new GZipStream(ms, CompressionMode.Decompress);
- byte[] dc_data =null;
- dc_data = ExtractBytesFromStream(zipStream, data.Length);
- return dc_data;
- }
- catch
- {
- returnnull;
- }
- }
-
相關推薦
WEB Service 下實現大資料量的傳輸
)直接返回DataSet物件 特點:通常元件化的處理機制,不加任何修飾及處理; 優點:程式碼精減、易於處理,小資料量處理較快; 缺點:大資料量的傳遞處理慢,消耗網路資源; 建議:當應用系統在內網、專網(區域網)的應用時,或外網(廣域網)且資料量在KB級時的
exp/expdp傳輸表空間和rman convert實現大資料量快速遷移
將Oracle資料庫中某個使用者遷移到另外一個庫上,遷移的資料量大小約 120GB 。如果採用 expdp 匯出的話時間會很長,再加上匯出的 DMP 檔案拷貝和 impdp 匯入資料的時間,不能滿足要求。 這裡採用 RMAN 的CONVERT 功能和 exp/expdp
Elasticsearch 使用scroll滾動技術實現大資料量搜尋
如果一次性要查出來比如10萬條資料,那麼效能會很差,此時一般會採取用scroll滾動查詢,一批一批的查,直到所有資料都查詢完為止。 scroll搜尋會在第一次搜尋的時候,儲存一個當時的檢視快照,之後
關於webservice大資料量傳輸時的壓縮和解壓縮
當訪問WebSerivice時,如果資料量很大,傳輸資料時就會很慢。為了提高速度,我們就會想到對資料進行壓縮。首先我們來分析一下。 當在webserice中傳輸資料時,一般都採用Dataset進行資料傳輸。執行的過程就是先把Dataset轉化為xml進行傳輸
webservice用於大資料量傳輸的處理
1. 直接返回DataSet物件 特點:通常元件化的處理機制,不加任何修飾及 處理; 優點:程式碼精減、易於處理,小資料量處理較快; 缺點:大資料量的傳遞處理慢,消耗網路資源; 建議:當應用系統在內網、專網(區域網)的應用
基於Apache POI匯出(百萬級)大資料量Excel的實現
POI匯出大資料量excel (注:專案原始碼及後續更新請點選) 1、ExcelUtils類: package Utils; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObje
JDK8 switch使用字串比if else 效率高,親測大資料量資料下
for (TemplateFormVO templateFormVO:templateFormVOS){ formid=String.valueOf(templateFormVO.getFormId()); formId=templateFormVO.getFormI
mysql大資料量下優化
1 優化sql和索引2 增加快取如:redis3 主從複製或主主複製,讀寫分離4 利用mysql自帶分割槽表5 先做垂直拆分,將一個大系統分為多個小系統,也就是分散式6 水平切分,要選擇一個合理的sharding key,為了有好的查詢效率,表結構也要改動,做一定的冗餘,應用也要改,sql中儘量帶shardi
大資料量下高併發同步
對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。 為了更好的理解併
大資料量情況下查詢效能低,耗時長的一種問題以及解決思路
背景交代: 1 mongodb 有500萬條資料 2 經過過濾 還有20多萬條資料 要得到上述20w條資料,一次查詢得到20多萬條,很可能會產生效能問題,於
大資料量下的集合過濾—Bloom Filter
演算法背景如果想判斷一個元素是不是在一個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。連結串列、樹、散列表(又叫雜湊表,Hash table)等等資料結構都是這種思路,儲存位置要麼是磁碟,要麼是記憶體。很多時候要麼是以時間換空間,要麼是以空間換時間。在響應時
大資料量下高併發同步的講解(高併發的瓶頸-需要處理的內容)
對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。 為了更好的理解併發和同步,我們需要先
大資料量下的SQL Server資料庫自身優化
原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次資料檔案 從SQL SERVER 2005開始,資料庫不預設生成NDF資料檔案,一般情況下有一個主資料檔案(MDF)就夠了,但是有些大型的資
通過索引,極大提高MySQL大資料量下的查詢效率
我在這裡測試了兩個表的左連線查詢,SQL語句是:select a.blog_id,a.blog_title,a.blog_thumb,a.blog_click,a.blog_addtime,a.blog_show,b.blog_category_name from `thin
Integer和int的比較,大資料量情況下造成頻繁gc的原因分析
很多基礎的知識,覺得沒用,所以沒有在意。當實際用到的時候,出現了不同於預想的結果,才會認真分析。 這是shell排序的程式碼 public long sort(Integer[] datas) { long start = System.currentT
【Itext】解決Itext5大併發大資料量下輸出PDF發生記憶體溢位outofmemery異常
關鍵字 itext5 outofmemery 記憶體溢位 大資料 高併發 多執行緒 pdf 匯出 報表 itext 併發大資料量高併發的時候,Itext5會發生記憶體溢位,outofmemery異常,經過大規模的記憶體檢查,發現Itext在生成表格的時候,使用了很多的Hash
Sybase 大資料量(100W條)分頁 jdbc實現目前要求無排序
首次分頁大概為10秒左右。以後翻頁基本上是瞬間完成。要求是無排序情況下。 分析:sybase不提供分頁方法。top函式還不能放在子查詢語句中。使用hibernate分頁前幾頁和後幾頁沒問題,如果資料量大翻到30000頁時就記憶體溢位了。而且效率慢。 使用儲存過程分
基於大資料量的快取查詢實現方案
業務、應用系統最常用的就是基於資料的查詢,這不同於巨集觀意義上的系統各個層面優化(應用端、服務端、DB端等等),基於資料的查詢更多時候需要考慮資料的規模、使用者的習慣、資料的變化性等因素
Java用POI實現讀取大資料量Excel
java程式碼使用poi的API解決在讀取大資料量的Excel資料時候記憶體溢位的問題:首先我需要宣告下面的工具類是在老袁部落格(https://laoyuan.me/posts/java-read-big-excel-with-poi.html)基礎上做了稍微
spring Batch實現資料庫大資料量讀寫
1. data-source-context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" x