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)存模式
磁盤模式
在事務提交前的耗時 (事務提交后的總耗時):
1w | 10w | 100w | |
內(nèi)存模式 | 0.04s | 0.35s | 3.60s |
網(wǎng)友評論 |