2010-03-22 23 views
1

我正在一個新的應用程序中建立一個SMS呼叫和響應系統,通過聚合網關接收消息,檢查它的功能關鍵字(運行,停止,詢問等),然後適當地處理它(保存到數據庫,返回答案或根據用戶授權執行任務)。目前運行良好,因爲只有少數用戶,但我認爲隨着我們擴大規模,它會出現更多問題。我們目前正在一臺DV機上運行它(mediatemple base dv)。用PHP/MySQL排隊時間敏感郵件的最佳方法是什麼?

我的問題是這樣的:將Memcached設置爲運行隊列還是使用運行守護進程的簡單數據庫逐一處理每條消息更有意義?我沒有太多的經驗,所以任何建議都會有幫助。由於消息傳遞在時間上有些敏感,因此處理此問題的最快和最可靠的方法是什麼?

此外,由於我們正在發送響應,因此我可能還需要設置和出站消息隊列。對兩者使用相同的概念是否有意義?

+0

什麼是您的應用程序目前的瓶頸? – 2010-03-22 06:15:07

回答

1

「最快」和「最可靠」並不一定會很好地結合在一起:它往往是一個或另一個。

約Memcached和數據庫,你必須意識到,memcached是一個緩存mecanism,而不是數據存儲mecanism。


這意味着它不應該被用來存儲數據,你不能再生:

  • 如果出現系統故障(如死機/重啓),你會失去什麼是memcached的 - 而數據庫更能夠恢復
  • 如果沒有足夠的內存來存儲數據,分佈式緩存會從緩存中刪除一些舊的項目,即使你沒有要求它

在創建分佈式緩存集羣時,memcached非常棒;但不應該用來存儲重要的數據,而且不能丟失數據。

+0

有道理。所以如果我想用簡單的數據庫方法,你會推薦什麼?自動遞增ID並處理每次傳遞最低的ID(然後刪除)? – 2010-03-22 05:32:33

+0

這將是一種可能性;您也可以使用時間戳列,並使用該列進行排序,而不是按自動增量進行排序*(如果索引適當,我認爲不會有太大區別)* ;;;另外,我不會刪除一次處理過的行:相反,我會使用額外的「has_been_processed」列,並將其更新爲1,因此表示該行已被處理*(這樣,如果出現問題,我可以找到一段時間後的行,這可能是有用的)*。 – 2010-03-22 05:43:10

相關問題