zoukankan      html  css  js  c++  java
  • 大数据时的运算效率问题

    第一步,優化字段

        原始數據導入數據時,對所有字段進行優化,儘可能地爲每個字段選用最小的字段類型
        字符型字段,一般導入時默認會是nvarchar型,改爲varchar型節省一半空間。
        數值型字段,如果是整數,如果最大可能數小於255,改爲tinyiny,如果最大可能數小於32768,改爲smallint,如果長度小於9位,改爲int。如果帶小數點,精度要求不是非常高的話,改爲real。
        日期型字段,如果只需要精確到天的話,改爲date型
        這樣經過優化之後,該數據所佔的文件尺寸常常能縮小一倍左右。數據查詢的性能會得到一定的提升。
    第二步,橫向拆分表
        按照關係數據庫三範式的原則,對原始的數據表進行拆分。一張原始表,一般能拆解成分散開來的十幾張表。通常來說,拆解後的表,會有一張核心的“事實表”,和多張“維度表”組成。
        大多少情況下說,適當拆表後,這張核心的“事實表”,只會剩下很少的幾個字段(列),但行數會很多,幾千萬或上億行。而其它的“維度表”,則是字段(列)很多但行相對很少。
        舉 一個例子,比如說原始的數據表中,有Year,Quarter,Month,Week,Date五個字段,那麼實際上我們只需要保留Date這個字段在核 心的“事實表”表內即可,其它的Year,Quarter等字段可以通過拆分出來的日曆表(“維度表”),在需要的時候再匹配回來。
        經過這第二步優化後,該數據所佔的文件尺寸一般能在前面第一步的基礎上,再縮小數倍

    縱向拆分表    
       在數據量巨大,同時可以按年或季度劃分數據時,將上一步分好的核心“事實表”,再按不同的年份或季度拆分成各個分開的表,能進一步提高數據分析時的查詢速度。
       縱向拆分出來的表,表結構完全相同,只是用不同的表名存不同年份或季度的數據。
       不用擔心後期分析時麻煩,後期分析時可以用視圖再把這些表連在一起,所以最後分析數據時,不管前面的步驟拆了多少張表,最後只需要連接使用單獨的一張最終視圖就可以。

    建立索引

       對應所有的表,都應該儘可能的建立主鍵。
       建立主鍵的第一個好處是,它可以提高“事實表”和“維度表”查詢時的關聯速度,也就是提高最後進行分析運算時的查詢速度。
       建立主鍵的第二個好處是,它可以預防導入重複的數據,保證數據的正確性。
       對應有可能經常被用做查詢時作爲過濾篩選條件的字段,應儘可能都建立索引。但索引會佔據額外的磁盤空間,同時降低寫入新數據和修改數據的速度,所以索引字段也不宜太多。對於以查詢爲主的表,可以多建一些索引,但對於會大量實時修改的表,則不宜有太多的索引字段。
       這第四步的優化,可以使得在後面分析查詢時,數據篩選的效率翻倍的提高。

    恰當的硬件

       其實CPU不太重要,如果任何時候如果你在跑SQL數據查詢時發現你CPU負荷100%滿了,那一定是你的查詢代碼寫錯了。
       下面兩個部件,可以提升數據查詢的速度:
       第一是內存,能配多大配多大。如果是32Bit的操作系統的話,配到4GB內存(再多的部分32Bit的OS認不了),如果是64Bit的OS的話,配到你主板能支持的極限。(記得打開MS SQL的AWE內存分配功能)
       第二是硬盤,簡單的說,配個SSD硬盤能讓你的SQL速度倍增。
       另外記得再多買個硬盤備份,不然數據沒了沒處哭去的……

    正確的查詢語句

    簡單地說,就是在寫查詢語句時,要寫成像卷心菜一樣一層一層往外逐步過濾匹配數據。不要寫成一棵大樹一樣一口氣試圖關聯所有數據進行匹配計算,那樣笛卡爾乘效果形成的數據膨脹,能讓你的SQL跑上半天也不理睬你。(CPU 100%負荷就是這麼出來的)

    摘录于:http://www.zhihu.com/question/20756848

  • 相关阅读:
    【重点突破】—— Vue1.0到Vue2.0的变化
    【饿了么】—— Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(三)
    【饿了么】—— Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(二)
    【饿了么】—— Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(一)
    【重点突破】—— Vue2.0 transition 动画Demo实践填坑
    【重点突破】—— 当better-scroll 遇见Vue
    【数据售卖平台】—— Vue2.0入门学习项目爬坑
    【温故知新】——BABYLON.js学习之路·前辈经验(二)
    【前端GUI】—— 前端设计稿切图通用性标准
    【开发总结】—— BABYLON 项目开发必备系列
  • 原文地址:https://www.cnblogs.com/mk9007/p/3745866.html
Copyright © 2011-2022 走看看