Flask-SQLAlchemy批量插入數據性能下降排查處理

2022年11月3日16:00:00 發表評論 640 ℃

之前我阿湯博客寫過一篇文檔《Flask-SQLAlchemy批量插入數據性能測試》,當時對幾種批量插入Mysql數據庫的方法做了性能比較。

只要不是通過for循環一條條插入,另外幾種方法都比較快的,一萬條數據也就0.6s左右。

但是最近我在做一個通過導入Excel或者csv文件,然后把數據批量寫入數據庫功能,使用bulk_insert_mappings方法發現性能下降挺厲害。

一共7600條數據,寫入數據庫的時間要20-30s左右,字段也才十多個。

經過了五六個小時的測試,這個過程就不贅述了,更換了各種方法、各種姿勢。下面分享給大家,希望對看到這篇文章的人有幫助。

主要原因就是因為同一個字段里面同時存在str和None的原因導致。

因為導入文件里面有幾列時間,數據庫字段datetime類型不允許插入空值,所以我把文件里面時間字段空值都替換成了None,然后就出現了插入數據庫性能下降的問題。

如果全部為str或者全部為None寫入性能沒有影響。

解決方案就是要么更改數據庫字段datetime類似為varchar,或者文件時間為空時給一個默認時間,不要替換為None。

最后測試寫入7600條數據到MySQL基本耗時在1-2s。

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: