2011-04-20 62 views
0

假設你有一個社交網站,你可以有朋友,也可以查看他們的最新活動。問題是,什麼纔是最有效的方式(避免性能問題)才能立即獲知他們的活動,例如在他們在線時更改個人資料,以及同時在線?Java社交網絡,朋友的活動狀態感知高效方法

我有兩種不同的方法可以解決這個問題,但我並不確定從數據庫和Java內存的角度來看哪一種方法是最有效的方法。以下是我的方法,請讓我知道,如果你有更好的方法: 1-使用java HTTP Session Listener獲取每個單個用戶的會話並遍歷更新。每隔幾秒鐘檢查數據庫是否有新更新,然後更新地圖。

+0

所以,你問你是否應該使用Facebook的實時更新,或圖形API。 – 2011-04-20 18:56:50

+0

Facebook的實時更新類型,但我所說的應用程序與Facebook無關。 – 2011-04-20 19:04:08

回答

0

第一:你只有在完成測量後纔會知道。

話雖如此,總是有一個時空折衷。這意味着如果你在內存中存儲了很多內容,速度會很快,但是你的內存佔用量很大。如果你通過數據庫去,你會有一個小的(java)足跡,但會慢很多。

所以你需要決定怎麼做。內存很便宜,所以把東西放在內存緩存中會很好用。但另一方面,你是否真的需要亞秒級更新?或者可以在檢測到之前更新一個配置文件20秒鐘?

有,討論了很多關於這些決定作出對NoSQL數據庫的SE-電臺播客的一大事件:http://www.se-radio.net/2010/05/episode-162-project-voldemort-with-jay-kreps/(我希望是這樣)

這個情節有關內存電網也挺好:http://www.se-radio.net/2010/11/episode-169-memory-grid-architecture-with-nati-shalom/

+0

是的,這是正確的Java內存比DB快得多。在我的場景中,有兩種不同的更新,一種是在每幾秒鐘重新加載Java地圖後連接到數據庫,另一種是從各種會話中檢索數據。真正令我擔憂的是,不斷擴大的Java內存可能會被過度使用,並且內存不足可能會在社交網站上發生異常。我真的找不到任何有關Facebook或Twitter服務器集羣的文章,它可以告訴X用戶在X服務器上分配了多少內存。 – 2011-04-20 22:55:07

+0

您正在使用的內存緩存需要一個逐出舊條目的驅逐策略。這可能發生在某個年齡達到或某一次數之後。您可能再次只是衡量:使用0,1000,2000,10000個用戶來衡量應用程序的大小,然後您會看到內存使用量如何增長並可以預測每個節點的用戶數量。無論如何您都需要進行負載測試,所以您可以儘早設置並在其幫助下進行測量。 – 2011-04-21 07:18:12

+0

謝謝Heiko這是我之後的事,但我懶得做一些進一步的實現。再次感謝您的回覆。 – 2011-04-21 12:29:28