2013-07-17 15 views
2

我有一個我正在與之合作的電子商務網站的一次性使用折扣代碼列表。我需要在我的網站上設置一個頁面,我的用戶可以填寫表單,然後給出其中一個代碼。這些代碼是預先確定的,並已通過文本文件發送給我。我不能直接生成它們。我需要找出從列表中獲取未使用的代碼的最佳方法,然後同時將它從列表中刪除(或更新標記以將其標記爲已使用),以避免給兩個人相同的可能性碼。換句話說,類似於隊列的東西,我可以從隊列中自動刪除一個項目。一次性代碼的原子級/安全服務

這個webapp將在AWS上運行,當前的代碼是Python(儘管如果有必要,我可能會使用其他的東西; PHP會很容易)。理想情況下,我會使用AWS服務或MySQL之一來完成這項工作,但如果他們不願意集成其他解決方案,那麼我可以接受其他解決方案。因爲我認爲「隊列」,SQS突然出現在我的腦海中,但這顯然不是它的目的(例如,隊列中留下的14天限制絕對不適用於我)。雖然我期望非常適中的流量(這意味着即使真的很冒險的解決方案可能會起作用),但我寧願瞭解甚至在規模上這樣做的正確方法。

+0

我不認爲你在這裏嚴格需要排隊。如果你給每個服務器一大塊代碼列表,並讓它們在低位運行時聲稱有重新填充,那麼它可能不會造成問題,但是當列表結束並且某些服務器需要時,最後需要處理該位使用已經發放給其他服務器的代碼。 (注意:我不是雲計算或您的應用程序的專家。) – user2357112

+0

我對此感到困惑。即使我給每個服務器自己的代碼列表,該服務器可能會有多個請求同時進入(或者至少足夠接近到在另一個更新數據庫之前請求代碼的時間,以表示它已經用過的)。這真的是我的問題的根源。我錯過了什麼嗎? – Wouldchux

+0

這是多線程的嗎?多重?在單個多線程服務器內協調很容易;你可以使用[同步隊列](http://docs.python.org/2/library/queue.html)代碼或[counter](http://29a.ch/2009/2/20/atomic在python中的獲取和增量)索引到代碼列表中。不過,我不知道最佳做法是什麼。 – user2357112

回答

0

我不能給出實際的代碼示例,但這樣做也只是在文件中的增量計數器的最簡單的方法之一,所以像

0 
code1 
code2 
code3 
etc 

,只是每次跳過多少行代碼用來。

你也可以在數據庫中

0

亞馬遜DynamoDB做到這一點很簡單地從AWS快速的NoSQL數據庫,這可能是一個非常適合這種使用情況。建立一個數據庫表很容易,你可以將代碼加載到那裏。 DynamoDB具有DeleteItem operation,它還允許您在相同的原子操作中檢索數據(通過將ReturnValues參數設置爲ALL_OLD)。這將允許您一次獲取和刪除代碼,所以其他請求/進程不能獲得相同的代碼。 AWS發佈官方SDK以幫助您連接和使用他們的服務,包括Python和PHP SDK(請參閱http://aws.amazon.com/tools/)。