2012-02-07 30 views
1

我有微小網址的服務,將數據發送到服務器使用Ajax功能,將數據發送到特定的頁面,並插入數據到數據庫簡單的工作。PHP:從溢出防止數據庫

我只是打了螢火蟲一點點,我發現我可以循環在第二的AJAX功能上千倍,它的浮動我的數據庫..我只是做了..

會話和cookie可能不明顯的原因在這裏工作..

how can i prevent this? 
+1

也許http://stackoverflow.com/questions/1375501/how-do-i-throttle-my-sites-的副本api-users – iblue 2012-02-07 22:29:32

+0

您是否在尋找防止意外誤操作的措施,「讓我試試這個」 - 攻擊或惡意的「腳本小子」? – VolkerK 2012-02-07 22:59:12

回答

0

我想你想防止的是DOS(拒絕服務)攻擊。網上有很多關於如何防止這種情況的信息。對於一個非常簡單的服務解決方案,可以限制與數據庫的交互以在請求之間進行暫停。

您可以使用會話,以幫助防止這一點。

流量:

  1. 用戶視圖頁面 - 通過AJAX
  2. 關於Ajax請求,基於會話建立
  3. 用戶使用的服務 - 檢查是否會話包含 「last_run」 時間戳。
  4. 如果它不存在,允許查詢,添加「last_run」
  5. 如果它確實存在,並且時間戳比你年長的超時(比如1秒),允許查詢,更新「last_run」。
  6. 如果它確實存在,並且時間戳不比你年長超時,不允許查詢。
+0

這可能是防止意外誤操作和刷新刷新刷新「攻擊」的保護。它不妨礙某人拋出會話cookie併發出新的請求。 – VolkerK 2012-02-07 23:00:47

+0

正確,這只是一個簡單的解決方案。如果需要更多信息,我們需要更多關於特定設置的信息,他實際上試圖防止什麼,交易數量,硬件解決方案是否可行等。 – evan 2012-02-08 00:30:25

1

一個很簡單的方法來解決這個問題,很好地工作,並防止DDOS攻擊是在後處理函數上使用批量插入。對於你的tinyurl來說,保存所有在文件系統中作爲連接文件輸入的數據的平面文本文件(CSV)可以很好地適用於此。

然後運行一個cron作業,每隔1〜5分鐘讀取一次文本文件並執行批量插入到mysql。這裏的關鍵是做批量插入。執行1個批量插入比單個100,000,000個查詢效率更高。

給你一個想法,我應付每天海量數據的插入,我們得到每分鐘大約百萬插入請求。作爲單個查詢執行1密耳插入將花費我們的巨大的 db服務器大約15分鐘。做它們作爲批量插入大約需要18秒。這是驚人的快速大容量插入是多少,你也只在你的mysql盒上消耗1個連接。

批量插入非常類似於常規插入查詢唯一的區別就是在VALUES部分。在通常情況具有值=( 'ABC', '123', 'ABC'),比如你會現在有... VALUES =(( 'ABC', '123', 'ABCD'),( 'CDE' , '456', 'DSW');

希望這有助於:)