2013-10-11 62 views
5

我知道水平分區......你可以創建很多表。使用MYSQL拆分大型Terabytes表

我有seen在基於應用程序的分片中,您將在多個數據庫服務器上具有相同的數據庫結構。但它不會包含相同的數據。

因此,例如:採用碎片

Users 1 - 10000: server A 
Users 10001 - 20000: server B 

的技術是MySQL的代理,例如一些工具(基於MySQL代理)是SpockProxy。我們也可以手動分割。必需將是一個主表,例如:

------------------- 
| userA | server1 | 
| userB | server2 | 
| userC | server1 | 
------------------- 

但上述這些技術在應用層面處理。我想在DB服務器層面解決它..

,我們可以做到這一點與多個服務器透明?這將允許Mysql表格進行縮放。

在X服務器上創建X表,最終用戶通過簡單查詢獲取數據到單個數據庫服務器?

總之我想在單表中插入一個16 TB的數據,但是我沒有在單機上有這麼大的空間,所以我想安裝兩個服務器,每個容量爲8 TB。但是使用查詢單個數據庫並在後端獲取結果可能是分片。

我也爲其他一些好的解決方案打開這個討論,例如, MYSQL Clustering

有沒有人關心解釋,或有一個很好的初學者教程(一步一步),教你如何跨多個服務器分區?

+0

據我所知,所有分片都是在應用程序級完成的。 MySQL不會透明地做到這一點。 – Namphibian

+0

@Nafphibian有沒有其他解決這個問題的方法,例如Mysql集羣等。 – Imran

+0

今天會看看它,但上次我使用集羣的速度很慢,真的不值得付出努力。 – Namphibian

回答

0

您需要在繼續之前調整自己的想法。我不認爲有一種簡單的方法可以在MySQL上執行此操作 - 如果您使用FEDERATED表和視圖付出努力,我相信您可以做到這一點。但是,rdbs最多隻能分割一次,這絕非易事。

但是分拆卻很有。分片表幾乎總是看錯的方法。相反,你真的需要分割數據集。這是因爲跨節點的連接非常昂貴。

所以我強烈建議回到繪圖板上。如果你真的不需要連接,可以看看像Cassandra這樣支持這種事情的其他dbs。但是,如果確實需要連接,則需要查看數據庫中的每個表並查找良好的分區標準,然後對其進行分區,以便擁有相同的數據庫模式和不同的分片。

一旦你有了這個地方,那麼你在你的數據庫之前放置一個代理來適當地處理路由查詢。見https://github.com/flike/kingshard作爲一種可能性(雖然作爲一個免責聲明,我沒有在MySQL上與這些工作)。通過代理,你可以看到你的應用程序的單個數據庫的外觀,當我讀到你的問題時,你確實在做什麼。