2009-11-10 27 views
3

我正在拍攝一個擁有自動出價系統的拍賣網站。這個系統讓人們不必去那裏投標。自動數據庫每秒讀取/寫入

我的問題是如何實現這樣一個系統。我做了php文件,一切都準備好了,我做了一個每隔一秒刷新一次的html頁面。它的工作原理,但我想知道是否有更好的解決方案。

我試過的第二個選項是製作一個java應用程序,它每秒打開網頁。這會消耗大量的內存/ CPU。另外,我認爲在某處存在內存泄漏。

我使用centOS和Plesk在專用的Linux服務器上運行此應用程序,所以我確信有很多替代方案。

例如:

  1. 執行一個PHP文件每分鐘,其中php文件環路,用於以休眠一分鐘一個cronjob。

  2. 一個php文件,循環1秒睡覺。

  3. 一個cronjob在一秒之後執行並安排另一個cronjob。

  4. MySQL調度程序,但我不知道如何實現,我聽說它鎖定了其他寫入數據庫。

  5. 我也聽說過cli,perl,python腳本,但我不熟悉它們中的任何一個。

請有人可以瞭解這些選項的任何知識,請在這個問題上爲我提供一些指導。我正在尋找最適合速度和內存使用的解決方案。

如果有人有另一種替代解決方案,我會很高興聽到這一點。

+0

您是否需要在服務器端運行PHP來更新內部狀態(數據庫,拍賣等),還是需要自動更新客戶端的網頁(顯示進度,出價等)? – csl

回答

2

每一秒鐘都是一個很小的時間間隔,以至於cronjobs不是一個選項,我也強烈建議不要使用「網頁」,因爲性能很重要,只是爲CLI編寫的腳本會執行此操作。

什麼,我會做的是:

  • 當有人激活自動競價 要註冊,在一個 數據庫。
  • 創建一個守護程序,該守護程序輪詢 數據庫中當時要執行的條目 。

誰,你需要非常小心每個週期後使腳本睡眠的,否則你會打倒你的數據庫。

在旁註中,你真的需要它每秒執行一次嗎?在我看來,自動出價是由事件觸發的,也就是說,在剩下10秒的時間內出價超過了你。這聽起來好得多實施和資源密集度較低(你也可以使用守護進程,聽自動出價事件,但這是另一回事:)

2

創建一個cron作業,以給定的時間間隔執行有問題的PHP腳本。如果以與上下文無關的方式編寫(不需要訪問$_GET,$_POST及類似文件),則可以使用execute the PHP script from the command line

0

如果您已經有一個可以完成這項工作的頁面,您可以安排每分鐘調用一次curl命令的cron(捲曲http://your/page.php)。唯一需要注意的是,如果從外部調用頁面,則可能需要保護頁面,否則應該是個問題。

1

那麼,你可以嘗試某種「基於事件發佈「,這基本上意味着一旦數據被插入到數據庫中,就會觸發事件發生。

舉例說明,MySQL觸發器,甚至是一個簡單的php腳本,在新的出價上插入INSERT,您檢查是否有其他人已經投標高於該出價的最高出價。
如果確實如此,則更新新的最高出價和當前最高出價者。

如果有多個競標者,您可能想要做一個循環,並查看誰將獲得最高出價。

問題是,你不應該真的跑來跑去做定期工作來找出這個業務問題。我建議你使用觸發器或事件。