Flask-SQLAlchemy批量插入數(shù)據(jù)性能下降排查處理

2022年11月3日16:00:00 發(fā)表評論 2,183 ℃

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

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

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

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

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

主要原因就是因為同一個字段里面同時存在str和None的原因?qū)е隆?/p>

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

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

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

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

【騰訊云】云服務器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

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