2013-04-01 34 views
1

我們正計劃創建一個廣告網絡。與任何正常的在線廣告網絡一樣,我們會爲發佈商/廣告客戶提供廣告投放,報告(統計信息)和一個小瀏覽網站。廣告網絡基礎設施意見? MySQL的? Memcached的? MongoDB的?

因爲應用程序將獲得巨大的印象(廣告投放)的要求,我們的應用程序必須能夠快速將數據記錄的曝光和點擊,登錄次數和點擊次數的計數爲每個出版商/廣告客戶。然後,這些數據將用於監控發佈商的展示次數/點擊次數並生成報告。

現在,我們已經計劃將基於PHP和MySQL(InnoDB的)整個系統,PHP,eAccelerator在,Memcached的(只是爲了保存有效的廣告)

問題/問題

縮放。 ..

我認真覺得我們的應用程序是不會很好地擴展時,我們的業務增長。

MySQL插入和更新肯定會成爲瓶頸。還有如何將這些全部分發給多個服務器,以便我們的應用程序可以根據負載進行擴展。

任何人都可以請幫助提出特別的印象記錄和計算應用的結構? MongoDB會以任何方式成爲更好的解決方案嗎?

任何幫助將不勝感激。

回答

0

我已經使用MySQL構建了多個高容量統計收集系統。只要您經過仔細的規劃,保持領先於縮放曲線,它們的表現就會相當好。特別是,如果你正在做大量的INSERTUPDATE查詢,重寫,你需要讓你的行大小更小,使用INT從查表,而不是VARCHAR列實例,並密切注意如何你的指數越來越大。

永遠,永遠模擬您的架構進行大規模的測試數據。將其濫用到突破點,修復它,並再次濫用它。你想看到煙,或者你沒有努力。請記住,硬件產生巨大差異,所以要小心使用盡可能靠近部署目標的東西。例如,如果您正在進行繁重的寫入工作,您的SSD筆記本電腦將在RAID10設置中將15K企業級驅動器的服務器關閉。

話雖這麼說,你可能想看看Redis。它不是一個關係數據庫,但是它的幾個的數量級比MySQL的「加一列X」或「給我Y計數Z區間」類型的操作要快得多。

+0

謝謝您的回覆。是的,我們正在照顧田野的大小。遵循你的基準測試和Redis的建議。 您是否認爲爲每個廣告請求做這件事是一個壞主意? $ rdate = gmdate('Y-m-d',time()); ('uid ='$'''')AND =''''''') ; ((uid ='$ field [3]'AND type ='adv')OR(uid ='$ uid'AND type ='pub')$ res = mysql_query(「UPDATE reports SET impressions = impressions + 1 WHERE )AND rdate ='$ rdate'「); – theanalyst

+0

使用'mysql_query'是一個超級壞主意,所以是的。PDO將是一個更好的選擇。除此之外,爲了獲得最佳性能,您需要*單列*唯一密鑰,而不是複合密鑰。使用'OR'實際上可能比兩個單獨的查詢更慢,這些查詢匹配一個'UNIQUE'索引,而MySQL查詢優化器可以在每個索引上做得更好。作爲我所說的一個例子,儘管如此,您將有一個'type_id'列設置爲儘可能最小的類型來表示,即使是'SMALLINT',而不是具有大量重複數據的可變長度字段。 – tadman

+0

謝謝你的建議。這會有很大的幫助。你的言論讓我對我的舉動更加大膽。現在我積極地向正確的方向發展。謝謝! – theanalyst