mysql - php高並發下如何防止資料的重複寫入

來源:互聯網
上載者:User
前端請求php寫入資料的介面太頻繁,導致mysql中出現大量重複資料,如何處理

回複內容:

前端請求php寫入資料的介面太頻繁,導致mysql中出現大量重複資料,如何處理

這個問題從三個方面來回答題主:

前端

前端的話要對請求進行限制,通過disabled提交按鈕或者是設定定時器來禁止使用者多重提交。

介面

介面一定要做好limit,但是這個並不是解決這個問題的關鍵點,因為你不可能設定一個limit為1 time per min。為什麼關注這個點是因為有時候使用者並不是一個人,可能是惡意程式。

後端服務

個人覺得這個是重點,它包括PHP端和Mysql。我不清楚你的資料是怎樣的,我舉例新浪微博。如果一個使用者寫好微博然後快速點擊了兩次發送,你會看到什嗎?兩條相同微博嗎?不可能,出現了你來找我好了。最簡單的做法,要對上次資料緩衝,然後校正是否是重複提交的。Mysql結構要設計好,如果你的資料要唯一,那麼你的欄位和主鍵設計時候要設定確保唯一性。

先碼這麼多,解決方案有好多種,可以去搜尋一下。

高並發還行吧,防止重複一般都是從資料上去處理的,前端也會做限制,因為重複資料肯定是重複請求,那麼頁面上防止重複點擊肯定是要做的,這肯定不是什麼特別有效方式,加上唯一的約束肯定是最好的方式,無論是請求時第三方的唯一約束,還是時間或者其他你們資料能稱作唯一的肯定是最好的。不過重複感覺很難避免,百度貼吧或者,qq有時候也會出現重複,尤其是伺服器效能降低卡頓的時候。

前端的請求是冗餘的嗎,是的話前端要做請求防重

最佳解決思路為:將並行轉換為串列。

轉換的方法有很多,常見的就是隊列形式。

首先你可以用UNIQUE INDEX給相應的field防止重複寫入

比如 ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

其次,要你的選擇可以是:

// 選擇一:覆蓋之前同id的詞條INSERT INTO thetable (pageid, name, somefield)VALUES (1, "foo", "first")ON DUPLICATE KEY UPDATE (somefield = 'first')// 選擇二:添加重複計數器INSERT INTO thetable (pageid, name)VALUES (1, "foo"), (1, "foo")ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)

最後,可以在寫入之前先尋找,求count(*),不過這種效率比較低。

好像沒有有效方式完美解決這個問題,可以設定一個緩衝判斷,執行過寫入一次,就不再執行下次同一寫入

熟悉linux可參考sudo鎖;

緩衝吧 記憶體建key 插入關聯式資料庫 延遲銷毀 key

好奇怪你們難道都不知道mysql的共用鎖定嗎

加鎖啊,共用鎖定

一般來說都是前端限制下,比如button按鈕在後端響應結束之前置灰;一般需求這樣做就足夠了

七目魚

前端限制 -- 過濾頻繁的請求,如按鈕變灰,或者控制一個標誌變數來判斷是否執行ajax請求 。。這個只是體驗,並不能真的限制~~
關鍵是後端限制
比如: select for update

整個請求的過程都可以做放置重複提交的驗證。

  1. 在前端控制,比如按鈕置灰等

  2. 在後端商務邏輯中,通過查詢,判斷該內容是否已經提交過(通過緩衝來記錄之類的)

  3. 在資料庫層通過唯一鍵的方式來限制重複提交的記錄。對於重複提交的內容自動被過濾。

在高並發的情況下,其實還要考慮下db 是不是能夠扛得住並發,所以增加隊列的限制,使得並發在進入db 的時候是一個串列的操作,當然這個還得看時機情況了。

MYSQL 的話用交易處理吧。。。

樓上回答的,有沒有看問題啊。這種情況基本上只能靠前端做限制,或者API規定同一個唯一標識的請求頻率。

需要說明什麼資料重複了,重複了有什麼影響?商務邏輯上要做避免重複的檢查嗎?先把商務邏輯定義清楚,才能有針對性的出解決方案。

前端先過濾掉重複重新整理的。然後服務端再去過濾。

在表單裡產生一個唯一的標識,提交的時候判斷這個標識的內容有沒有提交過了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.