大数据时的运算效率问题

第一步,優化字段

原始數據導入數據時,對所有字段進行優化,儘可能地爲每個字段選用最小的字段類型
   
字符型字段,一般導入時默認會是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

时间: 2024-10-08 11:13:01

大数据时的运算效率问题的相关文章

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

大数据时代征信业发展探析

近年来,随着互联网技术的发展,大数据越来越受到关注,其应用逐步渗透至多个行业,开启了全新的数据时代.数据是征信业务开展的基础资料,征信活动主要是围绕数据进行采集.整理.保存.加工,并最终向信息使用者提供.大数据不仅为征信业发展提供了极为丰富的数据信息资源,也改变了征信产品设计和生产理念,成为了未来征信业发展最重要的基石.我国征信业发展尚处于起步阶段,在大数据时代存在征信法律制度和业务规则不够完善.征信机构数据处理能力有待提高等问题.未来征信业面临的机遇和挑战并存,研究大数据时代征信业的发展具有重

话题讨论&征文--谈论大数据时我们在谈什么 获奖名单发布

从社会发展趋势的角度,非常明显大数据会是眼下肉眼可及的视野范围里能看到的最大趋势之中的一个.从传统IT 业到互联网.互联网到移动互联网,从以智能手机和Pad 为主要终端载体的移动互联网到可穿戴设备的移动互联网,然后再到万物互联的物联网,这一定是不可违抗的发展规律和前进方向.伴随着这个趋势必定有越来越多.形态越来越丰富的超量数据不断产生,而大数据明显是由此衍生出来的明白且必定的发展趋势. 讨论话题:谈论大数据时我们在谈什么 话题提示: 1   您能接触到的大数据有哪些? 2   您最想了解的大数据

谈论大数据时我们在谈什么

从社会发展趋势的角度,很明显大数据会是目前肉眼可及的视野范围里能看到的最大趋势之一.从传统IT 业到互联网.互联网到移动互联网,从以智能手机和Pad 为主要终端载体的移动互联网到可穿戴设备的移动互联网,然后再到万物互联的物联网,这一定是不可违抗的发展规律和前进方向.伴随着这个趋势必然有越来越多.形态越来越丰富的超量数据不断产生,而大数据明显是由此衍生出来的明确且必然的发展趋势. 讨论话题:谈论大数据时我们在谈什么 话题提示: 1   您能接触到的大数据有哪些? 2   您最想了解的大数据架构与算

大数据量分页存储过程效率测试附代码(转http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html)

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 1create database data_Test  --创建数据库data_Test  2GO  3use data_Test  4GO

国美金融通过大数据技术提高融资效率

国美金融供应链金融业务采用流程全线上操作,与核心企业实现系统对接,做到销售.应付.库存.合同等经营性数据在平台上实时推送.国美金融基于这些产业链的数据优势,国美金融便可利用科技力量,对于链上中小企业的经营状况有了充分了解,这就解决中小企业的信用低.难获融资的问题. 此外,为了提高融资效率,国美金融还通过大数据.云计算等技术,做到对链上中小企业提前授信.动态调整.随需随用.这些不仅使得链上中小企业获得在以往条件下难以取得的信贷支持,也让他们的融资意愿变得更高. 原文地址:https://blog.

大数据时遇到的问题

十月一后正式接管金币服务,到最后基本使之稳定用了两个月.当时交易量平均每天5万条. 接收的算是一个不太好的摊子,十月一期间还出现了某几个StandaloneDealer服务挂了的现象,并且基本每天都一堆错误log,但是金币交易的整个流程我认为是没有问题的. 所以整个解决过程基本上围绕如何让错误log消失,log是程序员catch时捕获的. 首先,解决的是匿名用户重复创建的问题.当业务部门在短时间发送多个同一匿名用户的交易请求时,Dealer会先去数据库匿名表检查不存在,然后创建,EF用的是批量提

C语言练习1_大数据的简单运算

问题: Work out the first ten digits of the sum of the following one-hundred 50-digit numbers. 37107287533902102798797998220837590246510135740250463769376774900097126481248969700780504170182605387432498619952474105947423330951305812372661730962991942213

2014.2.23加载大数据时不闪烁的listView

namespace 相册处理 { //将ListView重载为此新类,解决加载过程中闪烁的问题 //在designer.cs中改写: //private ListViewNeverFlickering listView1; //this.listView1 = new ListViewNeverFlickering(); internal class ListViewNeverFlickering : System.Windows.Forms.ListView { public ListView