我正在處理一個龐大的在線短信系統,用戶從其用戶面板發送消息,這些消息轉到名爲messages_queue
的mysql表中。PHP - 使用隊列和cron作業或直接處理請求?
然後,系統讀取隊列行併發送每個消息在Cronjob中。當然,以非常快的速度發送消息非常重要。
我在想,直接發送消息(根據用戶請求)並不使用隊列更好嗎? (發送消息需要連接到外部API)
我在考慮數據庫I/O時發現了這個問題。
這不是對數據庫的壓力嗎?
編輯/答:
我的問題是一個主要基於輿論的問題。順便說一句,以備將來使用我會寫我所做的和我得到的。上的@bansi評論,我想我的索引表,這是我所看到的:
這是我得到的開始,例如:
SELECT * FROM users WHERE parent="admin"
//response:OK
//Time: 3.581s
你知道,3.581秒的查詢是一個很長的時間。然後我試圖拿到我需要的東西:
SELECT uname FROM users WHERE parent="admin"
//response:OK
//Time: 1.02s
好的,這有點好一點,但仍然不是我想要的。在數據庫 索引可查詢字段和查詢中使用INDEX:
所以,我想這一個
SELECT uname FROM users USE INDEX(parent) WHERE parent="admin"
//response:OK
//Time: 0.168s
是的,這就是我想要的。使用INDEX
和specific needed fields
約快30倍,這正是我所需要的。
此問題主要是基於意見的。在我看來,使用單獨的隊列會更好,因爲您可以輕鬆處理錯誤和連接延遲。我認爲就目前的技術狀態而言,短信發送可能會導致任何數據庫壓力,即使您使用的是非常過時的計算機。 – bansi
@bansi但在'ssh'中我使用了'htop',並且我的大部分查詢都是'SELECT * from messages_queue WHERE active = 1 AND sendflag = 0',我的平均服務器負載約爲3.0,服務器。我認爲這不是一種常見的情況。 –
據我所知,cron的最小間隔時間爲1分鐘,每分鐘查詢不會超載數據庫。注意:你應該在下一份工作開始之前完成你的工作(或者有一些邏輯),以避免重複。 – bansi