婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL

C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL

熱門標(biāo)簽:如何選擇優(yōu)質(zhì)的外呼系統(tǒng) 清遠(yuǎn)申請400電話 沈陽智能外呼系統(tǒng)供應(yīng)商 谷歌地圖標(biāo)注位置圖解 東莞外呼企業(yè)管理系統(tǒng) 手機(jī)外呼系統(tǒng)違法嗎 桂林云電銷機(jī)器人收費(fèi) 地圖簡圖標(biāo)注 南通電銷外呼系統(tǒng)哪家強(qiáng)

前提

由于工作的原因,經(jīng)常需要對海量數(shù)據(jù)進(jìn)行處理,做的數(shù)據(jù)爬蟲相關(guān),動輒千萬級別的數(shù)據(jù),單表幾十個G都是都是家常便飯。  主要開發(fā)語言是C#,數(shù)據(jù)庫使用的是MySQL。

最常見的操作便是 select 讀取數(shù)據(jù),然后在C#中對數(shù)據(jù)進(jìn)行處理, 完畢后再插入數(shù)據(jù)庫中。  簡而言之就 select -> process -> insert三個步驟。 對于數(shù)據(jù)量小的情況下(百萬級別 or 幾百兆)可能最多1個小時就處理完了。但是對于千萬級數(shù)據(jù)可能幾天,甚至更多。 那么問題來了,如何優(yōu)化??

 (數(shù)據(jù)庫的一覽,有圖有真相)

第一步 解決讀取的問題

跟數(shù)據(jù)庫打交道的方式有很多,我來列舉下吧:

1. 【重武器-坦克大炮】使用重型ORM框架,比如EF,NHibernat 這樣的框架。
2. 【輕武器-AK47】 使用Dapper,PetaPoco之類,單cs文件。靈活高效,使用簡單。居家越貨必備(我更喜歡PetaPoco :))
3. 【冷兵器?匕首?】使用原生的Connection、Command。 然后寫原生的SQL語句。。

分析:

【重武器】在我們這里肯定直接被PASS, 他們應(yīng)該被用在大型項(xiàng)目中。 

【輕武器】Dapper,PetaPoco 看過源碼你會發(fā)現(xiàn)用到了反射,雖然使用IL和緩存技術(shù),但是還是會影響讀取效率,PASS
好吧那就只有使用匕首,原生SQL走起, 利用DataReader 進(jìn)行高效讀取,并且使用索引取數(shù)據(jù)(更快),而不是列名。
大概的代碼如下:

using (var conn = new MySqlConnection('Connection String...'))
{
  conn.Open();
  //此處設(shè)置讀取的超時,不然在海量數(shù)據(jù)時很容易超時
  var c = new MySqlCommand('set net_write_timeout=9999999; set net_read_timeout=9999999', conn);
  c.ExecuteNonQuery();

  MySqlCommand rcmd = new MySqlCommand();
  rcmd.Connection = conn;
  rcmd.CommandText = @'SELECT `f1`,`f2` FROM `table1`';
  //設(shè)置命令的執(zhí)行超時
  rcmd.CommandTimeout = 99999999;
  var myData = rcmd.ExecuteReader();

  while (myData.Read())
  {
    var f1= myData.GetInt32(0);
    var f2= myData.GetString(1);
    //這里做數(shù)據(jù)處理....
  }
}

哈哈,怎么樣,代碼非常原始,還是使用索引來取數(shù)據(jù),很容易出錯。  當(dāng)然一切為了性能咱都忍了

第二步 數(shù)據(jù)處理

其實(shí)這一步,根據(jù)你的業(yè)務(wù)需要,代碼肯定不一, 不過無非是一些字符串處理,類型轉(zhuǎn)換的操作,這時候就是考驗(yàn)?zāi)愕腃#基礎(chǔ)功底的時候了。 以及如何高效編寫正則表達(dá)式。。。

具體代碼也沒法寫啊 ,先看完CLR via C# 在來跟我討論吧 ,O(∩_∩)O哈哈哈~ 跳過。。。。

第三部 數(shù)據(jù)插入

如何批量插入才最高效呢?  有同學(xué)會說, 使用事務(wù)啊,BeginTransaction, 然后EndTransaction。 恩,這個的確可以提高插入效率。 但是還有更加高效的方法,那就是合并insert語句。

那么怎么合并呢?

insert into table (f1,f2) values(1,'sss'),values(2,'bbbb'),values(3,'cccc');


就是把values后面的全部用逗號,鏈接起來,然后一次性執(zhí)行 。

當(dāng)然不能一次性提交個100MB的SQL執(zhí)行,MySQL服務(wù)器對每次執(zhí)行命令的長度是有限制的。 通過 MySQL服務(wù)器端的max_allowed_packet  屬性可以查看, 默認(rèn)是1MB

咱們來看看偽代碼吧

 //使用StringBuilder高效拼接字符串
 var sqlBuilder = new StringBuilder();
 //添加insert 語句的頭
 string sqlHeader = 'insert into table1 (`f1`,`f2`) values';
 sqlBuilder.Append(sqlHeader);
 using (var conn = new MySqlConnection('Connection String...'))
 {
   conn.Open();
   //此處設(shè)置讀取的超時,不然在海量數(shù)據(jù)時很容易超時
   var c = new MySqlCommand('set net_write_timeout=9999999; set net_read_timeout=9999999', conn);
   c.ExecuteNonQuery();

   MySqlCommand rcmd = new MySqlCommand();
   rcmd.Connection = conn;
   rcmd.CommandText = @'SELECT `f1`,`f2` FROM `table1`';
   //設(shè)置命令的執(zhí)行超時
   rcmd.CommandTimeout = 99999999;
   var myData = rcmd.ExecuteReader();
   while (myData.Read())
   {
     var f1 = myData.GetInt32(0);
     var f2 = myData.GetString(1);
     //這里做數(shù)據(jù)處理....
     sqlBuilder.AppendFormat('({0},'{1}'),', f1,AddSlash(f2));
     if (sqlBuilder.Length >= 1024 * 1024)//當(dāng)然這里的1MB length的字符串并不等于 1MB的Packet。。。我知道:)
     {
       insertCmd.Execute(sqlBuilder.Remove(sqlBuilder.Length-1,1).ToString())//移除逗號,然后執(zhí)行
       sqlBuilder.Clear();//清空
       sqlBuilder.Append(sqlHeader);//在加上insert 頭
     }
   }
}

好了,到這里 大概的優(yōu)化后的高效查詢、插入就完成了。 

結(jié)語

總結(jié)下來,無非2個關(guān)鍵技術(shù)點(diǎn),DataReader、SQL合并,都是一些老的技術(shù)啦。

其實(shí),上面的代碼只能稱得上 高效 , 但是, 卻非常的不優(yōu)雅。。。甚至難看。。。

那那么問題來了?  如何進(jìn)行重構(gòu)呢? 通過重構(gòu)抽象出一個可用的類,而不必關(guān)心字符串拼接這些亂七八糟的東西,支持多線程合并寫入,最大限度提高寫入IO,  我們在下一篇文章中再來談?wù)劇?/p>

您可能感興趣的文章:
  • C#如何連接MySQL數(shù)據(jù)庫
  • C#連接MySQL操作詳細(xì)教程
  • C#實(shí)現(xiàn)MySQL命令行備份和恢復(fù)
  • C#連接MySQL的兩個簡單代碼示例
  • C#連接mysql的方法【基于vs2010】
  • C#在MySQL大量數(shù)據(jù)下的高效讀取、寫入詳解
  • c#幾種數(shù)據(jù)庫的大數(shù)據(jù)批量插入(SqlServer、Oracle、SQLite和MySql)
  • C#中調(diào)用MySQL存儲過程的方法
  • C#連接mysql數(shù)據(jù)庫完整實(shí)例
  • C#實(shí)現(xiàn)操作MySql數(shù)據(jù)層類MysqlHelper實(shí)例
  • c# 向MySQL添加數(shù)據(jù)的兩種方法

標(biāo)簽:湖州 重慶 常德 內(nèi)蒙古 天津 臨沂 成都 貴州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL》,本文關(guān)鍵詞  如,何在,海量,數(shù)據(jù),下,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL》相關(guān)的同類信息!
  • 本頁收集關(guān)于C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    老司机免费视频一区二区三区| 国产成人免费视频网站| 国产一区二区久久| 色综合久久久久综合体桃花网| 日韩免费观看高清完整版| 国产精品另类一区| 激情欧美日韩一区二区| 欧美日韩免费电影| 亚洲免费观看高清完整| 国产成人在线电影| 日韩欧美一级二级三级久久久| 亚洲一二三区视频在线观看| 成人av网址在线| 国产亚洲欧美激情| 黑人巨大精品欧美一区| 911国产精品| 三级一区在线视频先锋 | 欧洲亚洲精品在线| 国产精品毛片a∨一区二区三区| 久久99国产精品久久99果冻传媒| 欧美日韩国产片| 亚洲成人第一页| 欧美色窝79yyyycom| 亚洲午夜精品在线| 欧美久久一区二区| 日本免费在线视频不卡一不卡二| 69成人精品免费视频| 丝袜a∨在线一区二区三区不卡 | 亚洲国产aⅴ成人精品无吗| 色一情一乱一乱一91av| 一区二区在线看| 在线观看视频欧美| 亚洲mv在线观看| 7777精品伊人久久久大香线蕉超级流畅| 一个色妞综合视频在线观看| 91成人国产精品| 亚洲成人黄色小说| 日韩欧美www| 国产在线精品一区二区三区不卡 | 9久草视频在线视频精品| 国产精品免费视频观看| 99久久伊人网影院| 亚洲精品国产无套在线观| 欧美色图激情小说| 美女一区二区三区| 欧美国产精品专区| 欧美四级电影在线观看| 91极品美女在线| 香蕉影视欧美成人| 精品国产一区二区三区忘忧草| 国内一区二区视频| 亚洲特黄一级片| 欧美日韩国产经典色站一区二区三区| 石原莉奈在线亚洲二区| 久久九九久久九九| 欧美亚洲国产一区在线观看网站| 日本sm残虐另类| 久久久久一区二区三区四区| 91丝袜美腿高跟国产极品老师 | 99久久婷婷国产综合精品电影| 一区二区视频在线| 精品国产一二三| 91黄色激情网站| 韩国一区二区在线观看| 亚洲精品欧美二区三区中文字幕| 日韩午夜av电影| 99久久免费视频.com| 奇米影视一区二区三区| 亚洲欧洲av在线| 精品国产成人在线影院| 在线观看不卡视频| 国产成人av电影在线播放| 日日摸夜夜添夜夜添精品视频| 国产午夜精品一区二区三区四区| 欧美老女人第四色| 97久久超碰国产精品| 久久成人免费电影| 亚洲电影第三页| 自拍av一区二区三区| 欧美xxx久久| 3atv一区二区三区| 在线看日本不卡| 97精品电影院| 亚洲精品成a人| 欧美中文字幕一区二区三区| 国产剧情一区二区| 久久精品国产一区二区| 亚洲线精品一区二区三区八戒| 国产精品色一区二区三区| 久久青草欧美一区二区三区| 欧美高清视频不卡网| 欧美优质美女网站| 色综合一区二区| 99亚偷拍自图区亚洲| 国产成a人亚洲| 国产高清视频一区| 国产一区二区三区免费播放| 久久福利资源站| 麻豆国产精品777777在线| 午夜欧美视频在线观看| 香蕉成人伊视频在线观看| 亚洲一区二区影院| 亚洲一区二区三区四区五区黄 | 亚洲激情图片小说视频| 亚洲色图欧洲色图婷婷| 国产精品乱码久久久久久 | 精品国产伦一区二区三区免费| 91精品国模一区二区三区| 欧美精品777| 欧美精品123区| 7799精品视频| 日韩无一区二区| 欧美精品一区在线观看| 久久精品视频网| 国产蜜臀av在线一区二区三区| 国产亚洲欧美色| 亚洲丝袜精品丝袜在线| 亚洲精品视频在线| 婷婷成人激情在线网| 免费观看在线色综合| 韩国v欧美v日本v亚洲v| 国产成人av电影在线观看| 99国产精品久| 欧美日韩一区成人| www激情久久| 亚洲日本中文字幕区| 亚洲成在人线免费| 久久99久久99小草精品免视看| 国产麻豆成人精品| 一本大道久久精品懂色aⅴ| 欧美吻胸吃奶大尺度电影| 精品三级在线观看| 中文字幕色av一区二区三区| 亚洲电影在线免费观看| 久久爱www久久做| 99视频超级精品| 欧美一级生活片| 中文字幕一区二区在线观看| 五月天婷婷综合| 春色校园综合激情亚洲| 欧美日韩一区二区不卡| 久久久综合视频| 亚洲香肠在线观看| 国产精华液一区二区三区| 欧美无砖专区一中文字| 久久嫩草精品久久久精品一| 亚洲精选在线视频| 九九九精品视频| 色综合久久久久网| 久久在线观看免费| 亚洲成a人v欧美综合天堂| 国产成人午夜片在线观看高清观看| 欧美在线不卡一区| 国产欧美久久久精品影院| 午夜精品久久一牛影视| 亚洲大片在线观看| 视频一区二区国产| 99久久久久久| 久久免费美女视频| 日韩福利电影在线观看| 色网综合在线观看| 日本一区二区三区四区| 日本v片在线高清不卡在线观看| 99久精品国产| 国产性做久久久久久| 免费欧美高清视频| 欧美三片在线视频观看| 中文字幕中文字幕中文字幕亚洲无线| 美女国产一区二区三区| 欧美蜜桃一区二区三区| 《视频一区视频二区| 国产成人精品免费看| 欧美r级在线观看| 日本伊人色综合网| 欧美日韩www| 亚洲一区二区美女| 欧美最猛黑人xxxxx猛交| 国产精品色哟哟网站| 国产成人免费9x9x人网站视频| 日韩免费一区二区| 毛片不卡一区二区| 欧美一级欧美三级在线观看| 天天综合日日夜夜精品| 在线成人午夜影院| 日韩电影一二三区| 欧美一区二区三区白人| 天天影视色香欲综合网老头| 欧美日韩精品高清| 亚洲成av人片在线| 欧美少妇bbb| 肉肉av福利一精品导航| 欧美男生操女生| 美女www一区二区| 精品国产乱码久久久久久久久| 久久99精品久久久久婷婷| 精品国产一区二区三区忘忧草| 国产一级精品在线| 欧美国产精品久久| 91在线视频网址| 亚洲成人免费视|