這篇文章給大家介紹為什么進行l(wèi)ist()操作時MongoDB比PostgreSQL慢了7倍,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為普蘭店企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,普蘭店網(wǎng)站改版等技術服務。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
最近有需求,要將一個局域網(wǎng)Web數(shù)據(jù)平臺遷移到線上,順帶著,本地服務使用的PostgreSQL也要替換成國內(nèi)某云的MongoDB。由于之前的Web框架選擇的Django,為了能夠最小限度地改動代碼,并對接上MongoDB上已存在的數(shù)據(jù)庫和數(shù)據(jù),在一番對比之后(Djongo和MongoEngine),選擇了MongoEngine這個對象文檔映射(ODM)模塊來替代Django原有的ORM。對照著MongoEngine的文檔一頓操作,第一個頁面遷移完成,趕緊打開看看。不看則已,一看瞎哭,頁面加載完足足等了1、2、3、4、5、6、7、8、……27秒
而之前的系統(tǒng)這個頁面打開只需要幾秒鐘:
在這個頁面里面,主要數(shù)據(jù)操作是從數(shù)據(jù)庫中查詢出原始數(shù)據(jù),然后加載到Pandas的DataFrame中,接著在Pandas中進行各種數(shù)據(jù)處理,最后返回JSON數(shù)據(jù)給前端進行渲染。數(shù)據(jù)庫總的數(shù)據(jù)量為接近500萬,最后的查詢結果在3萬左右。對各個環(huán)節(jié)分別進行測試發(fā)現(xiàn),主要的時間消耗在了從數(shù)據(jù)庫讀取數(shù)據(jù),然后加載到Pandas這個過程中。于是將這個過程專門提取出來,單獨測試其消耗的時間。
結果發(fā)現(xiàn),使用MongoEngine進行數(shù)據(jù)查詢,然后加載到Pandas中需要幾十秒的時間:
21秒的耗時,可能是由于MongoEngine對PyMongo進行封裝之后的性能不行吧,于是直接使用PyMongo進行測試:果然,經(jīng)過一層封裝之后,MongoEngine的效率不如PyMongo,但是直接使用PyMongo也消耗了14秒的時間。而在本地使用PostgreSQL作為數(shù)據(jù)庫后端的Django ORM測試僅僅花費了3秒的時間:
使
用list()對數(shù)據(jù)
查詢結果進
行
處理
是將其加
載
到P
andas中
的一
個常規(guī)前置
操作,相當于遍歷查詢
集的結
果并將每一條數(shù)據(jù)添加到一個
列表中。
類似
于以下操作:
res = []
for i in xx:
res.append(i)
只是一個list()操作,就讓MongoDB的速度比PostgreSQL慢如此之多,難道我哪里操作不對?關于為什么進行l(wèi)ist()操作時MongoDB比PostgreSQL慢了7倍就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
新聞名稱:為什么進行l(wèi)ist()操作時MongoDB比PostgreSQL慢了7倍
標題路徑:
http://weahome.cn/article/iepspd.html