2011-04-27 315 views
9

我爲一家公司工作,我們總是訪問外部網站獲取信息。該網站由一家過時的軟件開發公司開發,甚至沒有網站。由於數據庫的內容提供商僅使用這個功能異常嚴重的站點上傳數據,因此他們在我所在的州幾乎是壟斷企業。這個網站的問題是,它太慢,它甚至不起作用。是MySql適合大型數據庫嗎?

控制了連接速度和瀏覽器類型之類的東西后,顯然問題在於網站本身。因此,我正在考慮重做該網站,然後將其提供給內容提供商作爲上傳數據的手段。基本上,這個項目需要一個非常大的數據庫來存儲數以十萬計的名稱,地址和其他類型的數據。

我對數據庫的唯一使用經驗是MySql,實際上我對動態內容的唯一體驗是PHP。所以,是的,我試圖找出舊的PHP + MySQL組合是否適合存儲和表示大量數據。我只在小型項目上完成了這項工作,但我認爲帶動態內容佔位符的整個HTML模板可以正常工作。

當然,我真的不知道爲什麼這個網站太慢了。也許這根本不是數據庫。也許它是服務器或其他東西。但我試圖完成的關鍵是改善本網站的速度和功能。我沒有其他類型的數據庫的經驗,所以你可以爲這樣的項目提供任何提示/建議,將不勝感激。此外,關於如何通常製作一個快速且功能強大的站點需要代表來自超大型數據庫的動態數據的任何提示也會有所幫助。

*編輯:我正在學習python,所以如果你認爲這將是一個更好的side-scripting語言,那麼我當然可以嘗試實現一些不同於上面的初始計劃。

+8

誠實。 PHP和MySQL可以處理它。只要你知道你在做什麼。所有人經常看到人們編寫次優查詢或緩慢的PHP代碼,並將其歸咎於PHP/MySQL。如果你知道你在做什麼。 PHP和MySQL可以處理它。如果你不知道你在做什麼。如果你轉向Python或Postgre,那不是問題。它也會吸引我們 – Tjirp 2011-04-27 15:11:32

+0

我們討論的內容有多大?您需要運行多大的硬件?但是你一定要和這家公司談談:如果你向他們支付數據訪問費用,那麼你可以讓他們加快速度,或者如果你願意爲他們提供幫助 - 他們可能不接受,他們可能只是想要爲了改善它而付錢 - 你也許應該討論這一點,以便與你的計劃達成一致。 – Rup 2011-04-27 15:11:38

回答

13

如果你做了一個好的設計,你可以在MySQL中擁有非常大的數據庫(this other question may help you)。定義正確索引,優化您的查詢(EXPLAIN是你的朋友在這裏)。選擇一個好的數據庫引擎

有很多事情要做,以獲得最好的MySQL。

編輯:一些更多的想法...

這也是很重要的,你的結構化數據和表格,使容易將它們寫,恢復或是尋找兩者之間的折中方式(視用例)。

此外,如果它增長,你可以使用集羣,在幾臺機器(例如使用主從模式)在幾個MySQL數據庫之間分區你的數據,這是另一種選擇。

爲了提高性能,您還應該考慮使用某種緩存進行重複查詢。

還有類似Vitess的工具可以像NoSQL數據庫那樣幫助擴展MySQL數據庫。

3

你只能真正開始在數以百萬計的MySQL的極限(如果真的需要的話,仍然可以將它推得更遠)。你可能會看看mysql的分拆,或者如果你使用了數十億美元,看看像Cassandra這樣的東西。

表現明智,php不是禁食,但應該足夠快。嘗試爲耗時的作業使用後臺任務/ cron作業,並進行大量緩存。

0

就我個人而言,我使用MySQL作爲大型數據庫與基於PHP的基於報表的網站混合使用。我們擁有數千行數十行數據,並且每天都有大約20多列數據來源與數據連接到服務器。 MySQL應該很容易執行與普通MSSQL,PostgreSQL,Oracle等大部分相同的功能......關鍵在於你的查詢,並確保它們是最好的,你可以編寫它們來減少負載服務器本身。祝你的項目好運!

12

如果PHP/MySQL可以scale to Facebook's usage,它可以擴展到你的。這不一定是所有情況下的最佳解決方案,縮放也不是一項簡單的任務。

+2

當抱怨MySQL性能時,許多人錯過的最重要的事情之一就是索引。查詢帶有幾條10000行而沒有索引和索引的表格會對速度很慢的服務器(在舊的pentium2 266 MHz上運行)從幾秒到幾毫秒產生巨大影響;)。有了索引,它仍然閃電般地使用php/MySQL。 – 2011-04-27 15:27:40

0

MySQL可以處理很多事情,您只需確保使用適合您需求的正確數據庫引擎即可。主要是因爲性能原因使用InnoDB,但您可以使用任何不是M​​yISAM的東西。

+0

MyISAM適用於某些數據,如果您大多數情況下插入並讀取數據,但很少更新或刪除,MyIsam可能比其他許多快速因爲它使用樂觀鎖定。 – 2011-04-27 15:21:29

2

是的,您可以使用PHP和MySQL創建大型應用程序。您還需要使用其他一些輔助工具,這將有助於擴展您的應用,例如負載均衡器。

現在事情是你不能這樣做,默認安裝MySQL本身。您需要了解如何平衡多個服務器上的負載。然後如何使用羣集或碎片。所以只要您的系統是在可擴展架構的基礎上開發的,您就可以做所有事情。

當您剛剛部署第一個版本時,不要擔心數百萬條記錄。縮放會逐漸發生。您無法部署只在一天內擴展的應用程序。你必須每天優化它。還記得Martin Fowler的報價「過早的優化是所有罪惡的根源」

網站的喜歡HighScalability可幫助您瞭解在LAMP堆棧:)

= H =

+0

引用來自Donald Knuth,而不是Martin Fowler(可能引用Donald Knuth)。 – 2012-06-08 23:37:54

0

你當然PHP的頂部設計出更好的架構MySQL可以處理大量的數據,如果你有一個良好的結構化(規範化),那麼你就沒有什麼可擔心的。

MySQL是用於一個非常非常大的項目,其中一些是:

  • 的YouTube
  • Facebook的
  • Drupal的
  • WordPress的
0

有幾個點提出你的問題。

我注意到的第一個問題是您提到存儲「數十萬」行。這不是很大。帶有512M RAM的我的386服務器可以處理很多行,並且延遲很小。如果你正確地設計你的數據庫,那麼你真正的問題將是關於將要到你的服務器的帶寬(每秒請求數)。

MySQL可以擴展,但它不是很好。Facebook的某些服務使用PHP/MySQL,但他們使用hadoop的速度更快,帶寬更密集。他們也使用PHP,但爲了更快的應用程序,他們使用嘻哈將其轉換爲C++並編譯它。

MySQL可以擴展,但如果你沒有正確配置它,那麼當表格變得太大時,它會慘敗。 PostgreSQL可以更好地擴展,但是如果配置正確的話,可以很好地進行擴展。

看起來你的應用程序比你以前的應用程序要大,但實際上並不「那麼大」。在特定情況下,我會擔心響應時間比數據庫縮放更多。