精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

新聞 開發(fā)
近日,一位程序員急需在一分鐘之內(nèi)生成十億行的測試數(shù)據(jù)庫,然而在用Python寫了腳本之后發(fā)現(xiàn)「大失敗」。怎么辦?當然是用Rust了!

 [[412076]]

最近,一位程序員表示自己急需一個「也就」十億行數(shù)據(jù)的測試數(shù)據(jù)庫,并且還得在一分鐘之內(nèi)生成。

于是,他做了一個所有程序員都會做的事:寫一個Python腳本來生成數(shù)據(jù)庫。

然而,很不幸的是,這個腳本非 常慢。

[[412077]]

于是,他又做了一個所有程序員都會做的事:進一步學習關(guān)于SQLite、Python以及不知道為什么還有Rust的知識。

項目已開源:https://github.com/avinassh/fast-sqlite3-inserts

目標

作者需要在他2019年的MacBook Pro(2.4GHz四核i5)上,一分鐘內(nèi)生成一個有10億行的SQLite數(shù)據(jù)庫。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

表的模式

要求:

  1. 生成的數(shù)據(jù)是隨機的;
  2. 「area」列將包含六位數(shù)的地區(qū)代碼(任何六位數(shù)都可以,不需要驗證);
  3. 「age」列是5、10或15中的任何一個;
  4. 「active」列是0或1。

不過,作者表示,對腳本的要求也不用太高,還是可以妥協(xié)的:

  1. 如果進程崩潰,所有的數(shù)據(jù)都丟失也沒有問題,再次運行腳本就可以了;
  2. 允許充分利用電腦的資源:100%的CPU,8GB的內(nèi)存和剩余的SSD儲存;
  3. 不需要使用真正的隨機方法,來自stdlib的偽隨機方法就可以。

Python原型

在最開始的腳本中,作者試圖在一個for循環(huán)中逐一插入1000萬條記錄,而這讓用時直接達到了15分鐘。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

顯然,這太慢了。

在SQLite中,每次插入都是一個事務(wù),每個事務(wù)都保證它被寫入磁盤,作者推斷可能問題就來自這里。

于是作者開始嘗試不同規(guī)模的批量插入,發(fā)現(xiàn)10萬是一個最佳點,而運行時間減少到了10分鐘。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

SQLite優(yōu)化

作者認為自己寫的代碼已經(jīng)很簡練了,并沒有什么可以優(yōu)化的空間。

于是他將下一個目標轉(zhuǎn)到了數(shù)據(jù)庫的優(yōu)化。

根據(jù)各種關(guān)于SQLite優(yōu)化的建議,作者做了一些改進。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust
  • 關(guān)閉「journal_mode」將禁用回滾日志,也就是說,如果任何事務(wù)失敗,都無法回滾。
  • 關(guān)閉「synchronous」,將使SQLite不再關(guān)心是否能可靠地寫入磁盤,而是把這個責任交給操作系統(tǒng)。也就是說,可能會出現(xiàn)SQLite并沒有成功寫入磁盤的情況。
  • 「cache_size」指定了SQLite在內(nèi)存中可以保留多少個內(nèi)存頁。
  • 當「locking_mode」為「EXCLUSIVE」模式時,SQLite鎖住的連接將永遠不會被釋放。
  • 將「temp_store」設(shè)置為「MEMORY」可以讓其表現(xiàn)像一個內(nèi)存數(shù)據(jù)庫。

此處作者提醒,請不要把這些操作用到生產(chǎn)上去。

重新審視Python

作者再次重寫了Python腳本,這次包括了微調(diào)的SQLite參數(shù),這次帶來了巨大的提升,運行時間大幅減少:

  • 原始的for循環(huán)版本用時大約10分鐘。
  • 批處理版本用時大約8.5分鐘。

PyPy

PyPy在其主頁上強調(diào)它比CPython快4倍,于是作者決定嘗試一下。

令作者有些意外的是,竟然不需要對現(xiàn)有的代碼進行任何改動,只需要在PyPy運行就可以了。

批處理版本只需要2.5分鐘,也就是速度快了接近3.5倍。

Busy Loop?

莫非是在Python的循環(huán)上耗費了太多時間?于是作者刪除了SQL指令之后再次跑了一遍代碼:

  • 批處理版本在CPython中用時5.5分鐘。
  • 批處理版本在PyPy中用時1.5分鐘(又是3.5倍的速度提升)。

然而用Rust重寫了相同的內(nèi)容之后,循環(huán)只需要17秒。

于是,作者果斷拋棄Python,轉(zhuǎn)投Rust的懷抱。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

Rust

像Python一樣,作者先寫了一個原始的Rust版本,一個循環(huán)執(zhí)行一行數(shù)據(jù)的插入。

然而,即便使用了所有SQLite的優(yōu)化,也依然消耗了大約3分鐘。于是作者進行了進一步的測試:

  • 嘗試把「rusqlite」換成異步運行的「sqlx」,這讓用時直接被拉到了14分鐘。作者表示,這比自己迄今為止寫的任何一個Python迭代都要差。
  • 在執(zhí)行原始SQL語句時,使用準備好的語句。這個版本的用時只有1分鐘。

最優(yōu)的版本

使用準備好的語句,以50行為一個批次插入,最終用時34.3秒。

作者又寫了一個線程版本,其中一個線程從通道接收數(shù)據(jù),還有四個線程向通道推送數(shù)據(jù)。

這個也是目前性能最好的版本,最終用時大約32.37秒。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust
1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust
1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust
1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

IO時間

SQLite論壇上的網(wǎng)友提出了一個有趣的想法:測量內(nèi)存數(shù)據(jù)庫所需的時間。

于是作者又跑了一遍代碼,將數(shù)據(jù)庫的位置設(shè)定為「:memory:」,rust版本完成的時間少了兩秒(29秒)。

也就是說將1億條記錄寫入到磁盤上需要2秒,這個用時似乎也是合理的。

這也說明,可能沒有更多的SQLite優(yōu)化可以以更快的方式寫入磁盤,因為99%的時間都花在生成和添加數(shù)據(jù)上。

排行榜 

插入1億行數(shù)據(jù)的用時:

Rust33秒 PyPy126秒 CPython210秒

總結(jié)

  1. 盡可能使用SQLite PRAGMA語句
  1. 使用準備好的語句
  1. 進行分批插入
  1. PyPy確實比CPython快4倍
  1. 異步不一定更快

目前,第二快的版本是單線程運行的,而作者的電腦有4個核心,于是他在一分鐘內(nèi)可以得到8億行數(shù)據(jù)。然后再經(jīng)過幾秒鐘的數(shù)據(jù)合并,時間仍然可以少于一分鐘。

網(wǎng)友評論

博主的這一番研究獲得了網(wǎng)友們的一致好評。

1分鐘插入10億行數(shù)據(jù)!拋棄Python,寫腳本請使用Rust

真的很喜歡這些觀點:

學習了更多關(guān)于PRAGMA語句。

PyPy的效率和靈活性可以通過即插即用的方式體現(xiàn)(將來一定會給它一個機會)。

文章的排版非常簡單,有適當?shù)脑创a鏈接。很有趣,很容易上手。

Rust高光時刻又來了!

責任編輯:張燕妮 來源: 新智元
相關(guān)推薦

2024-12-19 07:50:00

2017-03-15 09:34:26

華為軟件開發(fā)

2021-09-07 10:55:36

SQLitePythonRust

2018-11-28 11:20:53

Python函數(shù)式編程編程語言

2021-07-15 06:43:11

Bash調(diào)試腳本

2013-09-13 14:08:01

2014-04-22 09:42:12

Bash腳本教程

2019-07-18 16:32:06

Python函數(shù)數(shù)據(jù)

2018-02-01 14:15:00

Python函數(shù)

2021-04-23 09:50:41

topLinux命令

2023-10-12 11:48:18

SkyWalking工具

2014-08-08 09:30:04

android scrollview

2020-10-13 18:22:58

DevOps工具開發(fā)

2020-08-13 13:51:22

Python數(shù)據(jù)庫插入數(shù)據(jù)

2015-11-23 17:34:33

秒借

2018-03-12 21:31:24

區(qū)塊鏈

2017-03-16 08:46:57

延時消息環(huán)形隊列數(shù)據(jù)結(jié)構(gòu)

2021-08-02 13:20:31

代碼Python文件

2018-04-24 14:52:48

LinuxBash腳本

2023-12-25 14:50:39

Python迭代器
點贊
收藏

51CTO技術(shù)棧公眾號

午夜裸体女人视频网站在线观看| 国产欧美日韩综合精品一区二区三区 | 亚洲福利影视| 亚洲综合一二区| 欧美日韩精品免费看| 怡春院在线视频| 亚洲二区免费| 日韩最新av在线| av电影在线播放| 国产精品亲子伦av一区二区三区 | 午夜影院在线看| 久久免费大视频| 欧美一区电影| 最近日韩中文字幕| 久久国产精品久久| 国产免费av电影| 欧美亚洲三级| 欧美成人午夜影院| 免费视频91蜜桃| 久久a爱视频| 欧美一区二区视频免费观看| 国产欧美在线一区| 四虎亚洲成人| |精品福利一区二区三区| 久久久久久久久久久久久久久久av| 91影院在线播放| 亚洲综合丁香| 性欧美激情精品| av黄色免费在线观看| 国产伦精品一区二区三区视频 | 日批在线观看视频| vam成人资源在线观看| 色狠狠综合天天综合综合| 国产va亚洲va在线va| v片在线观看| 中文子幕无线码一区tr| 免费看国产精品一二区视频| 丰满岳乱妇国产精品一区| 麻豆精品久久精品色综合| 欧美中文在线观看| 日韩免费av片| 激情六月综合| 久久久久久久久综合| 午夜国产福利一区二区| 四季av一区二区凹凸精品| 亚洲欧美日韩区| 国产老熟女伦老熟妇露脸| 亚洲国产高清在线观看| 91精品国产综合久久久久久久| 色七七在线观看| 欧美aaa大片视频一二区| 欧美性xxxxx极品| 国产亚洲欧美在线视频| 大菠萝精品导航| 精品视频在线观看网站| 国产日韩欧美不卡在线| 欧美大香线蕉线伊人久久| 无码h黄肉3d动漫在线观看| 本田岬高潮一区二区三区| 97中文在线| 蜜桃视频污在线观看| 成人美女视频在线观看18| 国产成人精品福利一区二区三区| 国产不卡av在线播放| 国产一区二区三区免费看| 亚洲精品欧美一区二区三区| 不卡视频免费在线观看| 不卡av免费在线观看| 久久精品国产综合精品| 少妇性bbb搡bbb爽爽爽欧美| 国产香蕉久久精品综合网| 亚洲一区3d动漫同人无遮挡| 99在线播放| 亚洲成人av在线电影| 国产 福利 在线| 69堂免费精品视频在线播放| 欧美日韩第一区日日骚| 国产黄色一区二区三区| 国产丝袜一区| 一本色道久久综合亚洲精品小说| 老司机福利在线观看| 欧美91精品| 2018日韩中文字幕| 最近中文字幕在线观看视频| 久久国产麻豆精品| 97久久人人超碰caoprom欧美| 天堂中文在线资源| 欧美激情综合在线| 国产亚洲精品久久久久久久| 男女羞羞在线观看| 欧美视频一区二区在线观看| 无人码人妻一区二区三区免费| 中文无码日韩欧| 亚洲毛片在线观看| 美女网站视频色| 最新日韩欧美| 国产日韩欧美在线| 人妻少妇精品无码专区| 国产精品污www在线观看| 日韩成人三级视频| 欧美日韩视频免费观看| 欧美tk—视频vk| 无码一区二区三区在线| 伊人久久大香线蕉综合四虎小说 | 一区二区精品国产| 搞黄网站在线看| 在线看不卡av| 野战少妇38p| 日韩成人激情| 97视频在线观看视频免费视频| 中文天堂在线视频| 99久久精品国产麻豆演员表| 黄色免费高清视频| 精品欧美一区二区三区在线观看| 日韩美女视频一区二区在线观看| 日韩免费成人av| 亚洲三级电影在线观看| 国产自产女人91一区在线观看| 熟妇人妻中文av无码| 亚洲欧美日韩久久| 日本美女高潮视频| 亚洲人成网亚洲欧洲无码| 欧美乱大交xxxxx另类电影| 波多野结衣高清在线| 99久久精品国产导航| 日本丰满大乳奶| 国产原创一区| 亚洲欧美在线x视频| 国产一国产二国产三| 精久久久久久久久久久| 日韩久久不卡| 免费观看成人性生生活片| 日韩精品在线免费播放| 黄色激情视频在线观看| 国产成人亚洲综合色影视| 一区二区视频国产| 欧美videos粗暴| 一本一道久久a久久精品逆3p | 免费在线小视频| 欧美精品一区在线观看| 欧美成人三级视频| 国产一区二区三区免费| 亚洲AV无码成人精品一区| 欧美大片网站| 久久艳片www.17c.com| 国产精品久久久久久久一区二区| 日本一区二区视频在线| jizz欧美激情18| 成人在线丰满少妇av| 国产精品日韩在线观看| 中文日本在线观看| 欧洲精品中文字幕| 992在线观看| 国产最新精品免费| 热这里只有精品| 免费精品一区| 欧美激情啊啊啊| 蜜臀av午夜精品| 欧美日韩免费在线观看| 精品人妻无码一区二区三区| 日韩制服丝袜先锋影音| 亚洲一区三区视频在线观看| 99久久99九九99九九九| 欧美高清视频在线播放| 日韩一卡二卡在线| 一本色道久久加勒比精品 | 在线观看视频在线观看| 欧美日韩国产在线一区| 精品综合久久| 精品日韩视频| 久久久国产精品x99av | 高清不卡一区| 欧美俄罗斯性视频| 四虎国产精品永远| 欧美性大战久久久久久久蜜臀| 国产日产精品一区二区三区的介绍| 激情五月播播久久久精品| 亚洲国产一二三精品无码| 欧美wwwsss9999| 国产精品99久久久久久白浆小说| 永久免费在线观看视频| 日韩欧美激情一区| 久久黄色精品视频| 国产免费观看久久| 久久久久久久穴| 丝袜国产日韩另类美女| 亚洲综合激情五月| 欧美精品国产白浆久久久久| 国产精品免费一区| 国产极品人妖在线观看| 亚洲人在线视频| 99久久国产免费| 欧美日韩综合视频网址| 影音先锋制服丝袜| 福利一区在线观看| 热久久精品免费视频| 欧美成人综合| 色就是色欧美| 久久中文资源| 91久久精品国产91久久性色| 亚洲日本天堂| 欧美日韩福利电影| www.在线视频.com| 精品国产免费久久| 一区二区的视频| 欧美日韩亚洲精品内裤| 国产极品国产极品| 中文字幕成人网| 岛国av免费观看| 激情综合色播五月| 精品久久久久久久无码| 亚洲激情国产| 国产精品一二三在线观看| 精品在线手机视频| 国产欧美在线一区二区| 国产欧美日韩电影| 国产精品视频公开费视频| 欧美另类老肥妇| 久久久久99精品久久久久| 免费黄网站在线观看| 精品国产乱码久久久久久夜甘婷婷| 伊人色综合久久久| 91精品1区2区| 精品人妻无码一区二区性色| 亚洲一区二区精品视频| 日韩黄色免费观看| 国产精品久久午夜夜伦鲁鲁| 日韩人妻无码一区二区三区| 东方欧美亚洲色图在线| 午夜av中文字幕| 美女尤物国产一区| 五月婷婷六月合| 日韩国产一区二| 免费在线激情视频| 国产欧美高清| 又粗又黑又大的吊av| 韩日成人av| 欧美精品在欧美一区二区| 亚洲天堂免费| 91嫩草国产丨精品入口麻豆| 亚洲电影影音先锋| 精品日韩在线播放| 五月激情久久久| 精品一区二区成人免费视频| 99久久视频| 老汉色影院首页| 你懂的亚洲视频| 热久久最新地址| 欧美日韩国内| 国产原创popny丨九色 | 国产91免费看片| 国产精品极品美女在线观看| 国产97色在线| 成人全视频在线观看在线播放高清 | 一区二区三区四区| 99久久久久久中文字幕一区| 玖玖精品在线视频| 欧美日韩四区| 国产欧美日韩网站| 国产欧美一级| 亚洲性生活网站| 久久电影国产免费久久电影 | 在线精品免费视| 色噜噜狠狠一区二区三区果冻| 亚洲毛片一区二区三区| 欧美性猛交一区二区三区精品| 91丨九色丨丰满| 欧美成va人片在线观看| 视频国产一区二区三区| 国产亚洲免费的视频看| 国产三区在线观看| 久久久久久久久久久人体 | 91精品黄色| 久久精品凹凸全集| 日韩av电影免费在线观看| 99久久激情| 六月婷婷在线视频| 日本欧美一区二区三区乱码| 午夜激情影院在线观看| 成人精品免费视频| 日本二区在线观看| 亚洲欧美日韩在线| 青青国产在线观看| 欧美日韩国产天堂| 高潮毛片7777777毛片| 亚洲天堂久久av| 日日夜夜天天综合入口| 欧美一二三视频| 亚洲精品无播放器在线播放| 国产伦精品一区二区三区在线| 亚洲福利网站| 国内自拍中文字幕| 日韩主播视频在线| 亚洲AV成人精品| 国产农村妇女毛片精品久久麻豆| 久久精品黄色片| 色吊一区二区三区| 亚洲精品久久久久久久久久 | 日本美女xxx| 亚洲午夜精品在线| 国产天堂第一区| 亚洲丁香婷深爱综合| 97电影在线观看| 91禁外国网站| 精品一区视频| 日韩一区不卡| 9国产精品视频| 在线免费观看av网| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲综合婷婷久久| 久久一区二区视频| 久久久久久天堂| 欧美久久一二三四区| 男操女在线观看| 97视频人免费观看| 深夜激情久久| 椎名由奈jux491在线播放| 久久一区亚洲| 最近中文字幕无免费| 一区二区三区蜜桃| 国产精品高潮呻吟AV无码| 亚洲色图日韩av| 男女羞羞在线观看| 国产视频精品网| 欧美精品导航| 亚洲天堂av一区二区三区| 国产校园另类小说区| 精品人妻一区二区三区免费看| 日韩视频中午一区| www在线视频| 92看片淫黄大片看国产片| 日韩成人a**站| 香蕉视频网站入口| 国产婷婷一区二区| 无码人妻av一区二区三区波多野| 亚洲精品美女久久久久| av手机在线观看| 国产一区福利视频| 亚洲欧洲日本mm| 91九色蝌蚪porny| 亚洲一区国产视频| www.久久久久久| 欧美日韩第一视频| 97se亚洲国产一区二区三区| 日韩a级黄色片| 国产99久久久国产精品免费看 | 欧美午夜激情在线| 日本一本草久在线中文| 日本人成精品视频在线| 国产成人影院| 亚洲中文字幕久久精品无码喷水| 久久久久久久综合| 波多野结衣日韩| 色偷偷偷亚洲综合网另类| 日本亚洲欧洲无免费码在线| 伊人狠狠色丁香综合尤物| 狠狠色丁香婷综合久久| www.超碰在线观看| 精品国产第一区二区三区观看体验| 久久av色综合| 免费成人av网站| 欧美aaa在线| 黑鬼狂亚洲人videos| 欧美xxxx老人做受| 色是在线视频| 日韩久久精品一区二区三区| 国内精品伊人久久久久av一坑| 美女的奶胸大爽爽大片| 亚洲国产日韩欧美在线图片| 桃花岛tv亚洲品质| 亚洲三区在线| 国产精品夜夜嗨| 在线观看亚洲欧美| 中文字幕无线精品亚洲乱码一区| 羞羞视频在线观看一区二区| 人人妻人人澡人人爽欧美一区| 波多野结衣视频一区| 波多野结衣黄色| 欧美尺度大的性做爰视频| 美女福利一区| 欧美伦理片在线观看| 亚洲黄色在线视频| 欧美在线观看在线观看| 91亚洲精品在线| 亚洲一区二区三区高清不卡| 女教师淫辱の教室蜜臀av软件| 欧美一区二区视频免费观看| 波多视频一区| 国产日产欧美一区二区| 91麻豆高清视频| a天堂在线视频| 日本最新高清不卡中文字幕| 欧美粗暴jizz性欧美20| 国产交换配乱淫视频免费| 欧美一区二区三区在线观看视频| 无码小电影在线观看网站免费| 只有这里有精品| 国产欧美日韩久久| 高h调教冰块play男男双性文| 国产精品入口福利|