<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      大數據分析中使用關系型數據庫的關鍵點

      相當一部分大數據分析處理的原始數據來自關系型數據庫,處理結果也存放在關系型數據庫中。原因在于超過99%的軟件系統采用傳統的關系型數據庫,大家對它們很熟悉,用起來得心應手。

      在我們正式的大數據團隊,數倉(數據倉庫Hive+HBase)的數據收集同樣來自Oracle或MySql,處理后的統計結果和明細,盡管保存在Hive中,但也會定時推送到Oracle/MySql,供前臺系統讀取展示,生成各種報表。

      在這種場景下,數據庫的讀寫性能就顯得尤為重要!

       

      一、數據庫定位

      有大神說,給我足夠強的數據庫硬件,一個GroupBy就可以滿足各種統計分析場景。

      這話不假,我們一臺數百萬的金融級別Oracle一體機證明了GroupBy可以做得很強大,同時也證明了它有天花板,就是當數據更大的時候,它依然得趴下!

      于是,我們需要有設計原則,有優化技巧。

       

      核心原則:數據庫只是數據存儲的載體,在大數據中難以利用它的計算能力!

      有了這個原則,就意味著數據庫將會用得“純粹”:

      • 數據表獨立性很強,大表間很少join(這讓我想起有同學在Hive里對兩張大表做笛卡爾乘積產生270T數據)
      • 數據表很大,單表幾十億行很常見
      • 索引很少,一般按主鍵查單行或者按時間查一段

      二、分區存儲

       在這里,數據庫就是存儲數據的倉庫,海量數據需要拆分存儲,不可能全都擠一塊。

      根據業務不同,一般有兩種拆分方式:

      1. 單表分區。常見于Oracle,每月做一個分區,數據連續方便業務處理,但要求單機性能強勁。
      2. 分表分庫。常見于MySql,分個128張表乃至4096張表也都是很平常的事情,可以用很多性能較差的機器組建集群,但因數據不連續不便于業務處理。

      具體采用哪一種拆分方式,由使用場景決定。

      如果以后還要整體抽出來去做統計分析,比如原始數據和中間數據,那么優先考慮做分區。既方便連續抽取,又方便按月刪除歷史數據,對海量數據Delete很痛苦。分區內還可以建立子分區和分區內索引。

      如果用于業務數據或者最終統計結果,那么考慮分庫后分表,按照業務維度把數據“均勻”存在不同表上。比如對單號取CRC,然后對數據表數取模。

       

      有很多數據,屬于時序數據性質,或者日志型,都是只有插入,只有少量或者完全沒有Update,幾乎沒有Delete。

      這種數據有個很關鍵的時間字段,確定數據什么時候到來,比如InputDate/CreateTime/UpdateTime,可以借助觸發器給這個字段填充當前時間。

      基于時間維度抽取時序數據進行分析時,必須確保時間字段升序能夠查到所有數據,不會漏過也不會重復查某些行。

      三、高效查詢

       海量數據查詢,必須100%確定命中索引。要么是code=xxx,要么是 updatetime>=:start and updatetime<:end。

      根據主鍵查詢,命中單行或少量數據;

      根據時間查詢,必須合理選擇時間區間(start, end),讓查詢結果控制在10000~20000行左右較好。

      比如考慮到高峰時段,我們一般取5秒的區間進行查詢,一般得到10000~40000行。

       

      使用數據時,可能有很多查詢條件,但其中最重要的一般是時間區間。

      因為數據很大,DBMS本身的統計信息收集工作可能很不及時,導致執行計劃選擇錯誤的索引方案,這種情況下需要手工收集信息,甚至在查詢語句里面強制指定索引。

      四、批量寫入

      借助內存計算,我們往往可以在很短的時間內計算得到數十萬乃至數百萬數據,需要寫入數據庫。

      一般數據庫的Insert/Update性能只有3000~5000tps,帶著索引的負擔,難以快速把數據寫入其中。

      這里以Oracle為例,它的OracleCommand有一個超強功能ArrayBindCount,可以對一次參數化寫入操作綁定多組(例如5000組/行)。

      該方法能夠讓它得到最高寫入性能,實際業務使用得到30000tps左右。

      var count = 1_000_000;
      var connectStr = "User Id=scott;Password=tiger;Data Source=";
      
      var conn = new OracleConnection(connectStr);
      var command = new OracleCommand
      {
          Connection = conn,
          ArrayBindCount = count,
          CommandText = "insert into dept values(:deptno, :deptname, :loc)"
      };
      conn.Open();
      
      var deptNo = new Int32[count];
      var dname = new String[count];
      var loc = new String[count];
      
      var deptNoParam = new OracleParameter("deptno", OracleDbType.Int32)
      {
          Direction = ParameterDirection.Input,
          Value = deptNo
      };
      command.Parameters.Add(deptNoParam);
      
      var deptNameParam = new OracleParameter("deptname", OracleDbType.Varchar2)
      {
          Direction = ParameterDirection.Input,
          Value = dname
      };
      command.Parameters.Add(deptNameParam);
      
      var deptLocParam = new OracleParameter("loc", OracleDbType.Varchar2)
      {
          Direction = ParameterDirection.Input,
          Value = loc
      };
      command.Parameters.Add(deptLocParam);
      
      var sw = Stopwatch.StartNew();
      for (var i = 0; i < count; i++)
      {
          deptNo[i] = i;
          dname[i] = i.ToString();
          loc[i] = i.ToString();
      }
      
      command.ExecuteNonQuery();
      
      sw.Stop();
      
      Debug.WriteLine("批量插入:" + count + "所占時間:" + sw.ElapsedMilliseconds);

      MySql和SQLite都有它獨特的批量寫入功能,并且支持netcore。

      SqlServer也有批量寫入功能,但是目前還不支持netcore。

      MySql方案另起一篇文章專門寫。

       

       五、總結

      關系型數據庫存儲大數據,要點就是:簡單存儲、分區分表、高效索引、批量寫入!

       

      100億小數據實時計算平臺(大數據系列目錄):

      1,大數據分析中使用關系型數據庫的關鍵點

      2,MySql如何做到600000tps的極速批量寫入

      3,大數據分析中Redis經驗分享

      4,如何分批處理大數據(調度系統)

      新生命Redis組件(日均80億次調用)

      借助Redis做秒殺和限流的思考

      大數據分析中Redis怎么做到220萬ops

      每天4億行SQLite訂單大數據測試(源碼)

       

      End.

      posted @ 2018-09-13 23:49  大石頭  閱讀(7465)  評論(15)    收藏  舉報
      主站蜘蛛池模板: 久久国内精品自在自线观看| 天天做天天爱夜夜爽导航| 欧美人禽zozo动人物杂交| 小嫩批日出水无码视频免费| 2018年亚洲欧美在线v| 亚洲女同精品中文字幕| 亚洲第四色在线中文字幕| 免费观看的AV毛片的网站不卡| 国产熟女老阿姨毛片看爽爽| 亚洲色偷偷色噜噜狠狠99| av在线播放无码线| 清涧县| 粉嫩一区二区三区国产精品| 久久综合久中文字幕青草| 亚洲婷婷综合色高清在线| 免费费很色大片欧一二区| 亚洲国产成人久久综合三区| 无码日韩人妻精品久久蜜桃| 五月国产综合视频在线观看| 久久久久蜜桃精品成人片公司| 亚洲午夜伦费影视在线观看| 色综合天天综合天天更新| 国产成人精品高清不卡在线| 大冶市| 国产成人综合久久亚洲av| 日韩国产成人精品视频| 国产色爱av资源综合区| 国产肉丝袜在线观看| 熟妇人妻av无码一区二区三区| 国产成人高清亚洲一区91| 亚洲成人av在线系列| 99久久er热在这里只有精品99 | 午夜福利院一区二区三区| 日本欧美一区二区三区在线播放| 国产亚洲一二三区精品| 国产成人一区二区三区免费| 青青草无码免费一二三区| 英超| 人妻日韩人妻中文字幕| 国产精品一二二区视在线| 色视频不卡一区二区三区|