昨天上一章節我寫到了這篇【做爲架構師,下一次你應該考慮的10個數據庫】html
(上篇文章連接:https://juejin.im/post/5f0288db5188252e42158877)
java
有個掘友問了我一個問題,今天就來講明一下這個問題的答案,就當普及新知識數據庫
QLite是一種C語言庫,實現了一個 小型, 快速, 自包含, 高可靠性, 功能齊全的 SQL數據庫引擎。SQLite是世界上最經常使用的數據庫引擎。SQLite內置於全部手機和大多數計算機中,並捆綁在人們天天使用的無數其餘應用程序中。緩存
SQLite 文件格式穩定,跨平臺且向後兼容,開發人員保證至少在2050年以前保持這種格式。SQLite數據庫文件一般用做在系統之間傳輸豐富內容的容器並做爲數據的長期存檔格式 。架構
完整的ACID。併發
具備高級功能的全功能SQL實現,例如部分索引, 表達式索引,JSON, 公用表表達式和窗口函數。(省略的功能)函數
完整的數據庫存儲在 單個跨平臺磁盤文件中。很是適合用做應用程序文件格式。post
支持千兆字節大小的數據庫以及千兆字節大小的字符串和Blob。(請參閱limits.html。)性能
代碼佔用量少:徹底配置的內存不到600KiB,而省略了可選功能則更少。學習
簡單易用的API。
快速:在某些狀況下,SQLite 比直接文件系統I / O更快
用ANSI-C編寫。 包括TCL綁定。數十種其餘語言的綁定分別可用。
跨平臺:開箱即用地支持Android,* BSD,iOS,Linux,Mac,Solaris,VxWorks和Windows(Win32,WinCE,WinRT)。易於移植到其餘系統。
帶有一個獨立的命令行界面 (CLI)客戶端,可用於管理SQLite數據庫。
SQLite讀寫小塊(例如縮略圖)的 速度比使用fread()或fwrite()從磁盤上的單個文件讀取或寫入相同的blob 快35%。此外,一個單獨的SQLite數據庫包含10 KB的blob,與將blob存儲在單個文件中相比,其磁盤空間大約少20%。
SQLite官方在Linux工做站(Ubuntu大約在2011年,快速SATA磁盤上使用Ext4文件系統)上運行了49個具備各類BLOB大小和SQLite頁面大小的測試用例。對於每一個測試用例,都會建立一個包含100MB BLOB內容的數據庫。
BLOB的大小範圍從10KB到1MB。BLOB的數量有所不一樣,以使BLOB的總內容保持在大約100MB。(所以,對於1MB大小,有100個BLOB,對於10K大小,有10000個BLOB,依此類推。)使用SQLite 版本3.7.8(2011-09-19)。SQLite 3.19.0版(2017-05-22)的新測量代表,對於10KB Blob的讀取和寫入,SQLite 比直接磁盤I / O 快35%.
下面的矩陣顯示了讀取存儲在單獨文件中的BLOB所需的時間除以讀取徹底存儲在數據庫中的BLOB所需的時間。所以,對於大於1.0的數字,將BLOB直接存儲在數據庫中會更快。對於小於1.0的數字,將BLOB存儲在單獨的文件中會更快。
在每種狀況下,都將調頁器緩存大小調整爲將緩存內存量保持在2MB左右。例如,一個2000頁的高速緩存用於1024個字節的頁面,而31頁的高速緩存用於65536個字節的頁面。BLOB值以隨機順序讀取。
從上面的矩陣中得出如下經驗法則:
數據庫頁面大小爲8192或16384可爲大型BLOB I / O提供最佳性能。
對於小於100KB的BLOB,將BLOB直接存儲在數據庫文件中時,讀取速度更快。對於大於100KB的BLOB,從單獨的文件讀取速度更快。
————————————————
SQLite性能高徹底是由於它bai不具有不少數據庫必要du的特性,好比完整事務性,大數據集(順便吐槽,咱們以前評測的時候測試過10億,時間有一些比這個表裏的SQLite快,也不知道這個評測怎麼作的),連跨進程併發都沒有。
因此說白了,性能的優點徹底來自於缺乏的功能。 固然,它也有很大的適用範圍
感謝那些支持小編的小夥伴,有想法的能夠進小編新建的一個java學習交流羣:925895158
一塊兒探討一些好奇的問題,固然也能夠微我:xuanwo013一塊兒交流學習一下,共同進步,
有須要的還能夠分享一些好的資料,喜歡就來個小關注吧,感謝!!!