大資料量採用什麼方式建表

2021-06-15 05:53:44 字數 1303 閱讀 9502

以下是幾種常見的分表演算法。

1.按自然時間來分表/分庫;

2.按數字型別hash分表/分庫;

如果我們要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的使用者1%30=1,那麼我們就存在user_01表裡,如使用者的編號為500,那麼500%30=20,那麼我們就將此使用者的資訊儲存在user_20的表裡.

3.按md5值來分表/分庫;

我們假設要儲存使用者上傳的檔案,如果上傳量大的話,也會帶來系統的瓶頸問題,我們做過試驗,在乙個資料夾下如果超過200個檔案的話,檔案的瀏覽效率會降低,當然,這個不屬於我們本文討論的範圍,這塊也要做雜湊操作.我們可以用檔案的使用者名稱來md5或者用檔案的md5校驗值來做,我們就可以用md5的前5位來做hash,這樣最多我們就可以得到5^5=3125個表,每次在儲存檔案的時候,就可以用檔名的md5值的前5位來確定這個檔案該存那張表.

4.例項:某微博的url加密演算法和儲存策略的猜想.

現在好多微博都用這樣的url來訪問,如果他們的網域名稱為www.example.com,那麼如果你發微博的時候,你會發現你所發的url都變成了這樣的形式,他們是怎麼進行這樣的轉換呢?我猜想就是用到了我們上面講的md5的儲存和查詢規則,用你發的url來進行md5,得到md5值之後,如我們例子來說,就會用前6位來進行分表.

5.分表所帶來的問題.

分表也會帶來一系列的問題,如分頁的實現,統計的實現,如果我們要做乙個所有資料的分頁,那麼我們得每張表都得遍歷一遍,這樣訪問效率會很低下.之前我嘗試過用mysql的**來實現,最終用tcsql來實現了.

6.分表演算法的選擇.

首先,分表適合於沒有大的列表的應用來使用,要不然,會為這部分做好多額外的工作,如果你的應用資料量不是特別大的話,最好別用分表。

7.針對每秒插入資料500+的設想

為什麼要copy這個呢,因為很多資料庫在資料上千萬級別後,每秒插入資料的數度不是很快了,所以500/秒的速度夠嗆,解決方案設想:

建立資料總表及兩個緩衝表,結構完全相同,將資料先插入其中乙個緩衝表中,等到一定時間(插入效率降低之前),轉向插入另乙個緩衝表,同時啟動乙個後台程序將第

乙個緩衝表的的資料轉入總表,轉入總表後刪除第乙個緩衝表中的資料; 再等到一定時間(還是插入效率降低之前),轉向插入第乙個緩衝表,這時啟動乙個後台程序將第

二個緩衝表的的資料轉入總表,轉入總表後刪除第二個緩衝表中的資料; 如此迴圈往復...

如果後台程序處理的時間超過兩個緩衝表的迴圈週期的話,甚至可以考慮建立三個乃至四個緩衝表。

這僅僅是解決插入效率,查詢什麼的問題也大。

大資料量的建表 導資料

跨機器轉移資料檔案 scp 在linux伺服器之間複製檔案和目錄,cp只能在本機複製,不可以跨伺服器 scp r 20170907.tar.gz username ip export 解壓 tar zxvf 20170907.tar.gz 或者 將電腦本地檔案在跨集群間hdfs傳檔案 建立hdfs資...

大資料量演算法

給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 位圖思想解法 include stdio.h include stdlib.h include memory.h define max num 4294967295 int mai...

大資料量處理

看看這個,異曲同工,永遠不超時 該程式是針對非常龐大的資料庫開發的,沒有用迴圈 用途 對過萬條資料的資料庫字段內容批量替換 資料庫連線 dim beeyee dbname,connstr,conn,intsn1 dim content,num,intsn,intidno,strcodea,strco...