簡體   English   中英

Python Pandas MySQL - 為什么在將 SQLite 寫入數據庫時如此之快

[英]Python Pandas MySQL - Why is SQLite so much faster when writing dataframes to a database

我正在開發一個網站,用戶在其中將 csv 文件直接導入數據庫和前端,一旦數據被歸檔到數據庫中,它就會對數據執行一些數據分析。 I'm using pandas to convert the csv to a dataframe and to subsequently import that dataframe into the MySQL database:

導入 MySQL 數據庫:

engine = create_engine('mysql+mysqlconnector://[username]:[password]@[host]:[port]/[schema]', echo=False)
df = pd.read_csv('C:/Users/[user]/Documents/Sales_Records.csv')
df.to_sql(con= engine, name='data', if_exists='replace')

這樣做的問題是,對於我使用的數據集(500 萬行),性能太慢並且操作超時而沒有導入數據。 但是,如果我嘗試除使用 SQLite3 之外的相同操作:

導入 SQLite3 數據庫:

conn = sqlite3.connect('customer.db')
df = pd.read_csv('C:/Users/[user]/Documents/Sales_Records.csv')
df.to_sql('Sales', conn, if_exists='append', index=False)
mycursor = conn.cursor()
query = 'SELECT * FROM Sales LIMIT 10'
print(mycursor.execute(query).fetchall())

此代碼塊在幾秒鍾內執行並導入數據集的所有 500 萬行。 所以我該怎么做? 我預計不會有多人同時傳入大型數據集,所以我認為放棄 MySQL 並不會因為 SQLite 在此應用程序中提供的明顯性能優勢而受到傷害。 只是感覺有更好的方法......

MySQL 通過網絡連接將數據發送到磁盤。

SQLite3 直接通過磁盤發送數據。

看看https://gist.github.com/jboner/2841832

您沒有提到 MySQL 服務器在哪里。 但即使它在您的本地計算機上,它也會通過 TCP/IP 堆棧,而 SQLite 將直接寫入磁盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM