SQLite創(chuàng)建的數(shù)據(jù)庫(kù)有一種模式IN-MEMORY,但是它并不表示SQLite就成了一個(gè)內(nèi)存數(shù)據(jù)庫(kù)。IN-MEMORY模式可以簡(jiǎn)單地理解為,本來(lái)創(chuàng)建的數(shù)據(jù)庫(kù)文件是基于磁盤的,現(xiàn)在整個(gè)文件使用內(nèi)存空間來(lái)代替磁盤空間,其它操作保持一致。也就是數(shù)據(jù)庫(kù)的設(shè)計(jì)沒(méi)有根本改變。

提到內(nèi)存,許多人就會(huì)簡(jiǎn)單地理解為,內(nèi)存比磁盤速度快很多,所以內(nèi)存模式比磁盤模式的數(shù)據(jù)庫(kù)速度也快很多,甚至有人望文生意就把它變成等同于內(nèi)存數(shù)據(jù)庫(kù)。

它并不是為內(nèi)存數(shù)據(jù)庫(kù)應(yīng)用而設(shè)計(jì)的,本質(zhì)還是文件數(shù)據(jù)庫(kù)。它的數(shù)據(jù)庫(kù)存儲(chǔ)文件有將近一半的空間是空置的,這是它的B樹(shù)存儲(chǔ)決定的,請(qǐng)參看上一篇SQLite存儲(chǔ)格式。內(nèi)存模式只是將數(shù)據(jù)庫(kù)存儲(chǔ)文件放入內(nèi)存空間,但并不考慮最有效管理你的內(nèi)存空間,其它臨時(shí)文件也要使用內(nèi)存,事務(wù)回滾日志一樣要生成,只是使用了內(nèi)存空間。它的作用應(yīng)該偏向于臨時(shí)性的用途。

我們先來(lái)看一下下面的測(cè)試結(jié)果,分別往memory和disk模式的sqlite數(shù)據(jù)庫(kù)進(jìn)行1w, 10w以及100w條數(shù)據(jù)的插入,采用一次性提交事務(wù)。另外使用commit_hook捕捉事務(wù)提交次數(shù)。

(注:測(cè)試場(chǎng)景為在新建的數(shù)據(jù)庫(kù)做插入操作,所以回滾日志是很小的,并且無(wú)需要在插入過(guò)程中查找而從數(shù)據(jù)庫(kù)加載頁(yè)面,因此測(cè)試也并不全面)

內(nèi)存模式

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

磁盤模式

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

在事務(wù)提交前的耗時(shí) (事務(wù)提交后的總耗時(shí)):


1w10w100w
內(nèi)存模式0.04s0.35s3.60s

網(wǎng)友評(píng)論

<td id="hwk4m"></td>