關於大資料的處理的一些經驗

來源:互聯網
上載者:User

1.資料庫的技術上,目前我們公司在研究hadoop分層資料庫,具體瞭解不多;外面流行的NoSql非關係型資料庫,像亞馬遜、Google還有一些日本企業都有自己的NoSql資料庫;

2.傳統關係型資料庫的最佳化,資料庫層的最佳化和上層使用的最佳化。

資料庫層:需要DBA進行最佳化,減少片段,進行分區等;

使用層的最佳化,即最佳化SQL

從外界因素來看影響SQL有:CPU、RAM、Network、Disk

CPU:SQL的大量order
by,大量group by,case when等都會很費CPU,需要CPU進行計算。是否可以使用匯總來減少此問題

RAM:尋找的資料量過大,導致記憶體資源佔用過多。

如無where的SQL,select
*的SQL,全表掃描等;

頻繁的update、insert都會影響記憶體,每次對SQL的解析都需要一定的時間和空間。採用綁定變數。

Network:過多的DB串連,頻繁的DB開關,跨庫的關聯,大量資料的匯出,複雜的SQL等。

Disk:

大資料量的表,建立索引,保證索引的有效性;

減少大表的insert和delete,會造成磁碟片段,導致磁碟指標的不連續性;

大表的insert和delete會造成索引的失效,必要時先去掉索引再操作增刪改;

索引其實是一張表,要保證其精簡

索引的建立,最好用在易排序欄位,如number,date等,勿varchar;

varchar欄位盡量保持長度的一致性,寧可多給出空間;

減少磁碟的讀取次數;

對大表禁止順序性的全表掃描,使用索引;

減少disdinct,用unionall代替union;

Not like,<>,全模糊like,is
null,is not null,not in都會使索引失效;

索引上不要使用任何函數,盡量在等號的另一頭使用函數;

SQL的書寫一致,減少解析時間;

選擇最佳的執行計畫,複雜的SQL,不如多個簡單的SQL;

減少嵌套子SQL,使用關聯查詢;

避免笛卡爾積串連;

避免使用*,資料庫需要對*進行一次匹配,會消耗資源,而且並不一定所有的欄位都要進行查詢或者寫入,寫入時表結構變化還會導致出錯,所以避免*;

全表刪除,不要使用delete,使用truncate;

全表分頁的效率較低,建議使用分步是分頁;

3.在資料讀取最佳化到一定程度後,代碼上也可以進行很大的最佳化。

避免過多的開裝箱,使用實值型別;

對參考型別的集合,多使用泛型;

避免迴圈嵌套,和無休止的遞迴;

避免迴圈中建立大對象;

對大對象的釋放;

4.邏輯上的最佳化

在需要查詢大量資料的時候,可以使用分頁;

分頁影響到一些表徵圖的產生時,可以藉助匯總,先展示匯總資訊和表徵圖,然後在進行詳情的切入;

時間空間的相互替換。

5.對常用資訊的本地化儲存,如QQ第一次載入很慢,但後面登陸會很快。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.