2009-04-26 86 views
1

我需要建立一個MySQL環境,支持隨着時間的推移增加了許多獨特的數據庫(千,實際上)。 我認爲在某些時候我需要開始添加MySQL服務器,並且希望事先爲我的環境做好準備,以便輕鬆轉換到第2,3,100臺服務器。設置多個MySQL數據庫與可伸縮性選項

而這只是爲了有趣,如果解決方案爲藍本,使查詢數據庫的應用程序將所有查詢到一個單一的地址和接收結果這將是非常方便的。它應該不知道服務器的數量和位置。數據庫名稱是唯一的,可用於確定哪個服務器包含數據庫。

我做了一些研究,MySQL代理彈出作爲主要候選人,但我一直沒能找到具體的關於使其如上所述進行任何東西。

有人嗎?

回答

5

偉大的問題。我知道有幾家公司已經這樣做了(Facebook跳出最大規模)。沒有一個是快樂的,但其他方式也很糟糕。

更多的東西,你要考慮 - 當某些數據庫或服務器的失敗會發生什麼?當你需要做一個跨數據庫查詢時會發生什麼(即使你現在不這麼認爲,你也會這樣)。

下面是FriendFeed的解決方案:http://bret.appspot.com/entry/how-friendfeed-uses-mysql

這是一個有點「背asswards」,因爲它們基本上都採用MySQL作爲一個榮耀的key-value存儲。我不確定他們爲什麼不切斷中間人,並使用像BerkeleyDB這樣的東西來存儲它們的對象。連接管理,也許?看起來像MySQL的開銷太高了,可以很容易地添加一些東西(着名的遺言)。

什麼,你真正需要的(我認爲)是一個分佈式的無共享數據庫。幾個已經建立在MySQL和PostgreSQL等開源技術之上,但沒有一個是免費的。如果您處於購買心情,請查看這些公司:GreenplumAsterData,Netezza,Vertica

還有大量各種分佈式鍵值存儲解決方案在那裏。缺少更好的參考,這裏有一個起點:http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/

+0

可以說我不需要做跨數據庫查詢。每個數據庫都是它自己的一個島嶼,只是:a。應用程序需要能夠從一個單一點查詢所有數據庫,並且b。我需要能夠隨意添加新數據庫。 這是否改變了圖片? – Omer 2009-04-26 15:32:02

2

你的問題聽起來類似於一個我們面對 - 你是作爲一個白色標籤,以及每個客戶端都需要有自己獨立的數據庫。假設這個概念與您的概念相似,我們所做的就是利用一個「主」數據庫來存儲客戶端的主機名和數據庫名(可以在應用程序層中緩存)。客戶端訪問的服務器可以動態地將其數據源移動到所需的數據庫。這使我們能夠擴展到數以千計的分散在各個服務器上的客戶端數據庫。