2011-08-13 71 views
0

我正在寫一個數據庫日誌記錄紅寶石寶石,它只是從Beanstalk隊列中取出一份工作,並將其寫入數據庫中。Beanstalk vs DB

這是服務器A上的一個進程在服務器B上的Beanstalk隊列中放入一個作業(它想要登錄),並且我在服務器B上的日誌記錄過程將它取出並寫入服務器B上的mysql數據庫。

我想知道這是否值得嗎? 以比寫入數據庫更快的速度投入Beanstalk隊列。或者我的進程可以直接登錄到數據庫,而不是使用日誌記錄過程。

請注意,豆漿機服務器和數據庫都在另一臺服務器上。

魔豆內部使得從服務器A套接字調用服務器B. 我相信MySQL的需要做的一樣呢?因此,因此

是MySQL的到另一臺服務器將是比投入的豆莖隊列慢。

回答

4

它會快得多,主要是因爲Beanstalkd作業,默認情況下,are stored in-memory,如果您失去了服務器的電源,則會丟失,而MySQL是強烈的ACID兼容關係數據庫,需要付出很多努力並將每個日誌刷新到磁盤。

我想你會發現,在你的系統做了很多日誌的基準測試後,那個磁盤I/O將成爲你的限制因素,而不是TCP/IP套接字的速度。當前系統的優勢在於,當服務器A在服務器B的beanstalkd實例上記錄日誌時,它只佔用服務器A的很少時間,而服務器B可以定期將我們的許多日誌從beanstalkd刷新到MySQL,從而使該過程更加高效。缺點是,日誌越多,發生軟件/電源故障時會丟失的日誌越多,除非您使用beanstalkd的「-b」參數,通過將作業寫入磁盤使作業持久化(因此使過程變慢)。

當然,真正解決這個問題的唯一方法就是基準!