mysql - php請求卡庫儲存多條資料

來源:互聯網
上載者:User
從其他程式推送資料到php程式裡, 然後對資料進行判斷是否存在,存在則退出;不存在則插入資料庫, 並返回處理結果到資料來源
當流量大,出現卡庫的情況, 返回不到結果到資料來源。就會重複請求3次。最後的結果就是3次請求的資料都插入了
慢導致判斷不到資料是否存在。大神們,有什麼好的解決辦法嗎?
升級配置是一方面. 在程式上應該怎麼解決這個問題呢

回複內容:

從其他程式推送資料到php程式裡, 然後對資料進行判斷是否存在,存在則退出;不存在則插入資料庫, 並返回處理結果到資料來源
當流量大,出現卡庫的情況, 返回不到結果到資料來源。就會重複請求3次。最後的結果就是3次請求的資料都插入了
慢導致判斷不到資料是否存在。大神們,有什麼好的解決辦法嗎?
升級配置是一方面. 在程式上應該怎麼解決這個問題呢

我覺得你的重複這個和卡庫並沒有太大關係, 流量大的時候對資料庫做高並發的插入處理, 這種方式本身就可能有問題, 在這種情況情況下, 是不是可以通過隊列(使用redis就可以實現)來防止你的插入重複的問題會比較好一些呢.
至於卡庫, 當然是和流量有關係了, 對此, 你可以把庫進行主從配置, 主庫用來寫, 從庫用來讀, 這樣讀的壓力就不會落在主庫上面了, 也就不會太卡,同時, 對於讀的操作, 必要添加一些緩衝, memcached, redis都很不錯

首先一個問題,你是如何判斷這條資料是唯一的?如果必須先插入才知道,那我建議使用redis做一個鎖,對你這個使用者的操作加鎖,然後去改資料庫。

mysql沒有upsert比較遺憾
當然自己實現一個upsert也可以 如果資料能hash的話 可以利用類似bloom filter的方法在記憶體裡先過濾一道
不準的再去查資料庫

單從mysql可以使用事務配合唯一索引來做到資料不重複

這個問題是和卡庫沒關係,實際上應該是程式上的寫法出錯了。資料庫是有隊列的,不需要你自己去處理。
查詢-->返回-->插入

你的問題應該出現在資料庫返回給PHP的時候,又被查詢了一樣的不存在資料,因為返回還是不存在,所以PHP還是執行了插入。可以考慮用預存程序直接在資料庫判斷存在性然後寫入。唯一索引、組合唯一也可以考慮用上。

實際上此類的並發出現機率原則上是非常低的,你可以檢查下是不是使用了多線程配置這個網站了。

多謝幾位了.

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.