大資料量的分表方法

2022-09-16 13:45:11 字數 1262 閱讀 5584

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

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

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

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

,那麼我們就將此使用者的資訊儲存在user_20的表裡.

例如:function get_hash_table($table,$userid) else 

return $table."_".$hash; 

} echo get_hash_table('message','user18991'); //結果為message_10 

echo get_hash_table('message','user34523'); //結果為message_13 

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

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

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

現在好多微博都用這樣的url來訪問,如果他們的網域名稱為 www.example.com,那麼如果你發微博的時候,你會發現你所發的url都變成了http:

這樣的形式,他們是怎 麼進行這樣的轉換呢?我猜想就是用到了我們上面講的md5的儲存和查詢規則,用你發的url來進行md5,得到md5值之後,如我們例子來說,就會用前6 位來進行分表.

5.分表所帶來的問題.

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

.分表演算法的選擇.

首先,分表適合於沒有大的列表的應用來使用,要不然,會為這部分做好多額外的工作,如 果你的應用資料量不是特別大的話,最好別用分表。呵呵,以前在做專案的時候,一專案經理要我們設計了乙個千萬級別的分表演算法,而應用的pv不會超過

100,總有點大炮打蚊子的感覺,而且因為分表,把整個專案的工期拖延了不少,得不償失。

大資料量的儲存分表常見演算法

以下是幾種常見的分表演算法。1.按自然時間來分表 分庫 2.按數字型別hash分表 分庫 如果我們 要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操 作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的...

大資料量的建表 導資料

跨機器轉移資料檔案 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...