Mysql

處理多執行緒插入的正確方法是什麼

  • September 14, 2021

我是數據庫的新手,現在我需要使用 MySQL 來建構 Web 伺服器。

總之,我有一個用 Python 開發的 web 框架。它將從/向 MySQL 讀取/寫入數據。

現在我不知道如何處理 multithreading 的情況insert

假設有很多使用者正在將他們的數據寫入一張表中。我會使用一個執行緒池來處理這些請求,也就是說同時會有多個inserts。

我的問題是:

如果我設置了concurrent_insert=2,multiple insert-s 是否仍然會導致 table 的鎖定,這樣我會得到一個非常糟糕的性能(所有的inserts 都必須一個一個處理)?或者 MySQL 本身可以insert正確處理倍數,因此我可以獲得不錯的性能?

對於倍數,“共享一個連接對象”和“每個都有自己的連接對象”insert有什麼區別嗎?insert

沒做什麼。

說真的,MySQL 被設計為預設提供並發性。它可以處理各種可能發生的“衝突”。

MySQL 支持多個“引擎”。除非您使用的是舊版本,否則預設為ENGINE=InnoDB. (參見CREATE TABLE。) concurrent_insert與舊的、已棄用的、ENGINE=MyISAM;不要使用那個引擎。

您應該始終做一件事:在執行 SQL 語句後檢查錯誤。(這可以通過“try…catch”來完成。)如果沒有別的,用錯誤消息中止,這樣錯誤就不會被忽視——這可能很難調試。

一個功能齊全的網站甚至不需要“執行緒池”。(如果您的網站變得非常受歡迎,這可能很重要。)

正常的 Web 使用情況是:為一個想要一個網頁的使用者啟動一個程序。然後它應該有一個與 MySQL 的連接。時期。(這是否解決了您的“共享一個連接對象”?)當另一個使用者打開同一個網頁時,網路伺服器會啟動另一個 python 副本,它將與 MySQL 建立單獨的連接。

引用自:https://dba.stackexchange.com/questions/299565