百萬行mysql資料庫最佳化和10G大檔案上傳方案

來源:互聯網
上載者:User

最近這幾天正在忙這個最佳化的方案,一直沒時間耍,忙碌了一段時間終於還是拿下了這個項目?項目中不要每次都把程式上的問題,讓mysql資料庫來承擔,它只是個mysql而已。

問題1:針對MySQL Community5.5+版本最佳化業務執行速度,提高整體系統效率

測試伺服器硬體環境:Intel Core i5,8gb記憶體,7200rpm硬碟,Win7專業版

Table名稱

讀取頻率

寫入頻率

最低連續讀取速度

最低連續寫入速度

預估資料量

C….

頻繁

不頻繁

30行/150ms

100行/s

百萬行

D…

頻繁

不頻繁

30行/150ms

100行/s

百萬行

De…..

頻繁

不頻繁

30行/150ms

10行/s

萬行

St……

頻繁

不頻繁

30行/150ms

100行/s

百萬行

S……

頻繁

頻繁

30行/150ms

100行/s

百萬行

Pr...

很頻繁

不頻繁

1000行/s-5000行/s

100行/s

百萬行/表

De…….

很頻繁

頻繁

1000行/s-5000行/s

1000行/s

百萬行/表

De……

很頻繁

頻繁

1000行/s-5000行/s

1000行/s

百萬行/表

 

 

 

 

 

 

 

 

 

 

 

 

 

 

看到這個想到的是拆分表,不外乎就是表的縱向拆分和橫向拆分,我在項目中也遇到過類似的問題,當時也是使用mysql資料庫當時大概列數有800多,mysql資料一張表的欄位是不能有800多個,最開始測試的是用String 按照JSON的格式存入的資料庫,結果發現處理時加入了迴圈,反而使系統效能變得很慢匯出一個Excel也是很吃力的,最後採用分表大概分了9張,解決了問題,其實現在想想是不是使用對象的序列化,將序列化的對象存入資料庫呢,使用在從資料庫中取出來還原序列化使用,當時分表後滿足了需求就沒再測試對象的序列化的方法了。但是這次給的需求不需要縱向拆表,是否需要橫向拆表呢?測試一次先,每次的點子都是要測試的e。

 

 

有些時候在mysql中還是要善用limit,

 

除開主鍵其餘沒加索引,這樣上了百萬條的資料查詢應該是不存在問題,話不多說最佳化SQL吧。

但是插入還是存在問題,是否需要分表呢?如果只是上百萬還是可以不用分表的,如果分表就要處理好分頁查詢,刪除和增加的操作,我還是喜歡使用Mysql資料的同步,使用兩個mysql資料庫,伺服器ip分別為ip1和ip2,我們將ip1作為Master資料庫,把ip2作為slave伺服器,我們可以採用單項同步的方式,就是Master的資料是主要資料,然後slave主動去Master哪兒同步資料回來,太晚了,明天測試通過就可以開始最佳化項目了。

在資料庫中資料在100w多行時插入資料耗時2.822秒的時間,

問題2:大檔案上傳居然有這樣的要求,

檔案大小

Action

最大執行記憶體佔用

內網最低傳輸速率(802.11g)

50mb

Upload

5mb

1mb/s

500mb

Upload

5mb

1mb/s

5gb

Upload

5mb

1mb/s

10gb

Upload

5mb

1mb/s

50mb

Download

5mb

1mb/s

500mb

Download

5mb

1mb/s

5gb

Download

5mb

1mb/s

10gb

Download

5mb

1mb/s

 

 

 

 

 

 

 

 

 

 

 

 

 

以前遇到過一個視頻網站上傳要求也是最大4G左右,這次居然要上傳最大的有10G,

為提高大檔案傳輸速率,將目標檔案分成N塊檔案,對應啟動N個線程通過TCP/IP協議來傳 輸,傳輸檔案前先檢查是否存在該檔案的臨時檔案群,如果存在找出其斷點位置進行續傳,最後合并文 件。非同步分割發送,用目前最主流的FLASH+AJAX技術。ActionScript和HTML5是支援SOCKET通訊的,呵呵。

實現流程:

1 用戶端向服務端發送傳遞檔案啟動訊號(傳送檔案名字)

2 伺服器檢查是否包含有該檔案所對應的臨時檔案(eg, 傳輸file.txt,就檢查是否存在temp[i]file.txt,(i為 第N塊臨時檔案)),如果存在就發送所有臨時檔案的斷點位置給用戶端

3 用戶端更具檔案大小將檔案分為N塊(每塊預設大小為500M,可通過參數進行配置)以加快傳輸速率, 然後根據伺服器返回的斷點位置(如果有)對每塊檔案進行移位,移動到斷點位置進行續傳,如果伺服器 上沒有臨時檔案夾,就進行普通的傳送檔案

4當所有線程工作完成,合并所有臨時檔案夾。

大檔案上傳的問題已經實現使用的是serverlight實現的。測試通過了大概是5-6M每秒。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.