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

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

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

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

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

內(nèi)存模式

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓

磁盤模式

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓

在事務提交前的耗時 (事務提交后的總耗時):

<table id="qz0pa"></table>

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

網(wǎng)友評論