2013-07-09 17 views
2

我有興趣創建一個網頁遊戲(喜歡travian.com)。我有一些在PHP,SQL和JavaScript的知識。我的問題是這樣的:創建基於時間的動態活動(如建築施工時間等)的最佳方法是什麼?

什麼是建立動態的基於時間的事件,如建築施工時間等最好的方法?

我具體說的是一段時間後自動更改數據庫的事件。從我可以收集的信息中,可以使用chron查詢數據庫以瞭解建築物建築物的更新時間,並更新它們,例如,建築時間+建造時間=當前時間。 這將是一個解決方案(我不喜歡,因爲大多數網絡犯錯誤只允許1分鐘的時間間隔)。

另一種解決方案似乎是使用mysql事件,其中每次用戶請求構建建築物時,我們都會在數據庫上創建一個對象並在事件觸發後更新它。這對我來說似乎是最直觀的答案。

但是,我沒有足夠的經驗或知識來弄清楚是否有更好的解決方案,或者如果這些解決方案對於「大」目的有任何可行性。

如果任何人都可以給我一些問題的燈光,或者指出我在正確的方向,我將不勝感激。我提前道歉,因爲英語不是我的第一語言。

+0

這個帖子會給你一些有用的建議:http://stackoverflow.com/questions/122954/timed-events-with-php-mysql – Pieter

回答

1

我相信這裏的答案取決於您需要進行的更新是時間驅動還是事件驅動,以及它們是否專門更新數據庫的其他部分。

如果它們純粹是事件驅動的並純粹更新數據庫,那麼SQL觸發器可能是一個可行的選項。即使如此,業內人士對於使用觸發器是否是一種好的做法的看法參差不齊,因爲它可能會使未來的開發人員很難找到變化的原因。觸發器的另一個缺點是它可能導致更新時用戶的性能下降(因爲數據庫比初始更新要複雜得多)。

如果更新是時間驅動的,或者它們包含數據庫本身範圍之外的任何更新(例如有時更新文件系統),或者您希望避免觸發器簡化未來開發人員的維護,那麼cron工作方式是一個很好的選擇。這裏的一個問題是,通過cron作業計劃的大量更新可能會導致性能下降,因此在實現作業時需要減輕這種情況(此處選擇關閉時間是一種選擇,就像實現隊列系統一樣運行更新,以便在讓其他數據庫請求通過之前,cron作業只發出一定數量的更新)。

個人而言,我更喜歡cron-job +排隊更新過程。

+0

你好Jeffrey,比你對你的評論。也許我沒有正確解釋自己,我很抱歉。我想用的是MySQL事件調度器(我沒有這方面的經驗,但聽起來像exaclty我想要的)。這聽起來或多或少像一個定時觸發器,所以我希望你的答案覆蓋它。但我不太確定如何在chron的基礎上正確實施它。想象一下,某個事件的時間安排是從14:30:45開始,而時辰恰好每分鐘運行一次(這似乎是大多數時辰服務可用的最小時間間隔)。這會讓我產生30秒的差距嗎? –

相關問題