2010-10-14 22 views
3

我們有一個Java(Spring)Web應用程序和Tomcat servlet容器。 我們有類似博客的東西。 但是博客必須使用Ajax動態加載帖子。 客戶端的ajax腳本每秒檢查一次新帖子。 也就是說Ajax必須每秒向服務器請求新帖子,這對數據庫來說將非常重。如何優化數據庫連接數量?

但是,如果我們同時擁有數十萬個連接呢? 我認爲我們必須每秒鐘用cron檢索所有帖子,然後將它保存在某處。但是哪裏? 主要想法是卸載數據庫。 有關建築的任何想法? 在此先感謝!

+0

您是否已經在緩存您的數據庫請求在一個memcache中? – ZeissS 2010-10-14 14:44:34

+0

調查Casandra:http://cassandra.apache.org/這可能是你的銀彈。 – 2014-02-12 20:48:04

回答

3

有其它架構的輪詢可能是更理想的,視情況而定:

長輪詢

長輪詢是 傳統的輪詢技術的變和 允許的仿真信息 從服務器推送到客戶端。通過長時間輪詢,客戶端以類似於正常輪詢的方式向服務器請求 信息,其中 爲 。但是,如果服務器沒有任何 信息可用於客戶端, 而不是發送空響應, 服務器保存該請求並等待 可用的某些信息,但是, 。 一旦該信息可用 (或合適的超時之後),一個完整 響應被髮送到客戶端 。客戶通常會立即 立即重新請求信息 從服務器,以便服務器 將幾乎總是有一個可用的 等待請求,它可以使用到 傳遞數據以響應事件。 在web/AJAX上下文中,長輪詢是 也被稱爲Comet編程。

這種技術的實現Long Polling

例子: Push Server

你也可以使用觀察者模式以註冊請求,並通知他們時,更新完成。

+0

是的,這是我找到的那個!非常感謝! – gennad 2010-10-16 11:45:11

0

成千上萬的併發用戶的所有投票站我們的網站每秒使一個巨大的流量。如果你真的期望這個負載,你將不得不相應地設計你的平臺,可能是通過集羣化多個Web,應用程序和數據庫服務器。

請記住,你並不需要爲每個用戶一個數據庫連接的數據庫連接池。

0

我不熟悉的Tomcat,但在WebSphere我們可以設置連接池準備一定數量的連接。

另外,你主要是擔心讀取或相同的寫操作?

另外,你可能還需要有數據庫「分裂」視地區而定等等。這樣有整個數據庫中沒有任何單個重負載,但隨後它可以分裂,甚至負載平衡。

還有「NoSQL」數據庫來查看。也許要考慮一下。只是想法幫助。