哪些人,哪些公司或軟件在用SQLite:
Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飛信,Chrome,F(xiàn)ireFox
可見SQLite的穩(wěn)定性及性能是不會(huì)有什么問(wèn)題的,詳細(xì)列表請(qǐng)參見:http://www.sqlite.org/famous.html。
網(wǎng)上關(guān)于SQLite的介紹一抓一大把,總結(jié)起來(lái),他有如下特點(diǎn):
SQLite優(yōu)點(diǎn)及適應(yīng)場(chǎng)合:
輕量級(jí)
綠色組件
單一文件
跨平臺(tái)
查詢效率極高
使用事務(wù)插入速度極快
支持limit分頁(yè)
適合查詢速度要求較高,內(nèi)存占用較少的場(chǎng)合,尤其是嵌入式操作系統(tǒng),如各種手機(jī)操作系統(tǒng),低并發(fā)web(99.9%網(wǎng)站是低并發(fā)),php環(huán)境里原生支持SQLite,asp.net/.net winform里可以很方便的使用System.Data.SQLite
缺點(diǎn)與不適應(yīng)場(chǎng)合:
不適合并發(fā)性高的場(chǎng)合 如大量insert,update訪問(wèn),SQL標(biāo)準(zhǔn)支持不全
SQLite vs Access
SQLite官方網(wǎng)站沒(méi)有與Access對(duì)比的說(shuō)明,我覺(jué)得應(yīng)該是:SQLite是開源的,單文件,不僅可以運(yùn)行在Windows上,也可以運(yùn)行在各種Linux系統(tǒng)上,而他的很多場(chǎng)合跟Access是不同的,他的優(yōu)勢(shì)足以站在一個(gè)比Access更高的位置,所以沒(méi)有可比性,但我們普通人拿Access跟SQLite比,是因?yàn)樗麄兘患牡胤剑P(guān)系到我們?nèi)∩帷?/p>
交集處有:windows系統(tǒng)里web/winform,
在我的測(cè)試中
一次插入5行及以上,每行有20來(lái)個(gè)字符,SQLite使用事務(wù)速度遠(yuǎn)快于access
一次插入多行,每行有8000以上字符,SQLite使用事務(wù)速度 快于 access 一倍左右
SQLite查詢速度極快,甚至快過(guò)SQL Server 2008 r2 10倍(因?yàn)镸SSQL索引列不能超過(guò)900個(gè)字符,所以varchar(max)不能建索引)
單條數(shù)據(jù)插入速度比Access略慢,事務(wù)插入大量數(shù)據(jù),在每行數(shù)據(jù)量不大時(shí),遠(yuǎn)快于Access
Access經(jīng)常出現(xiàn)數(shù)據(jù)庫(kù)壞的情況,SQLite聽說(shuō)沒(méi)有這個(gè)問(wèn)題。
SQLite極速Select測(cè)試
同樣的數(shù)據(jù),同樣的SQL語(yǔ)句:
SELECT * FROM dbo.Articles WHERE txtContent LIKE '%柳永法%'
在SQLite及MSSQL上執(zhí)行效率讓人震撼,SQLite竟然快MSSQL 10倍,
并且SQLite沒(méi)有進(jìn)程只看到程序進(jìn)程內(nèi)存沒(méi)有任何升高,而MSSQL的進(jìn)程則從1G多升到了3G多
| 數(shù)據(jù)庫(kù) | 條數(shù) | 查詢用時(shí) |
| SQLite | 118848 | 60s |
| MSSQL | 118848 | 540s |
| | | |
| SQLite | 7428 | 6s |
| MSSQL | 7428 | 60s |
關(guān)于SQLite多線程及ASP.net并發(fā)測(cè)試
- //Winform 1000個(gè)線程同時(shí)操作,僅cpu占用很高外,數(shù)據(jù)正常插入,沒(méi)有使用Lock
- ThreadPool.SetMinThreads(1000, 1000);
- ThreadPool.SetMaxThreads(1000, 1000);
- for (int i = 0; i < 1000; i++)
- {
- ThreadPool.QueueUserWorkItem((obj) =>
- {
- SQLiteParameter[] parms ={
- new SQLiteParameter("@txtTitle", "標(biāo)題"+obj),
- new SQLiteParameter("@txtContent", "內(nèi)容可以大于8000"+obj+new string('=',8000+1000)),
- new SQLiteParameter("@Adder", "添加人"+obj),
- new SQLiteParameter("@AddTime", DateTime.Now),
- new SQLiteParameter("@DeptId", 1),
- };
-
- SQLiteHelper.ExecuteNonQuery(SQLiteConnectionString, CommandType.Text, @"
- insert into Articles(txtTitle,txtContent,Adder,AddTime,DeptId) values (@txtTitle,@txtContent,@Adder,@AddTime,@DeptId)
- ", parms);
-
- }, i);
- }
ASP.net使用Microsoft Web Application Stress Tool進(jìn)行1000個(gè)線程的壓力測(cè)試1分鐘,使用Elmah.dll記錄錯(cuò)誤,測(cè)試后沒(méi)發(fā)現(xiàn)程序報(bào)錯(cuò),也只是很占CPU而已
通過(guò)本人測(cè)試,SQLite也應(yīng)該算是比較適合高并發(fā),及多線程,但官方說(shuō)不適合,不知道是不是我測(cè)試方法不對(duì)
SQLite資源地址:
SQLite的官方主頁(yè):
http://www.sqlite.org/
SQLite中文站:
http://www.sqlite.com.cn/
System.Data.SQLite:
http://sqlite.phxsoftware.com/
sql學(xué)習(xí)筆記之 嵌入式數(shù)據(jù)庫(kù)(sqlite,firebird)
http://www.cnblogs.com/ljzforever/archive/2010/03/09/1681453.html
SQLite GUI圖形管理工具:
SQLite Expert(可選數(shù)據(jù)庫(kù)編碼,支持原生配置各種參數(shù),軟件更新速度極快,一天一個(gè)或多個(gè)版本,經(jīng)試用,發(fā)現(xiàn)還有很多不完善的地方):
http://www.sqliteexpert.com/download.html
Navicat for SQLite(導(dǎo)入,導(dǎo)出功能強(qiáng)大,功能實(shí)用,操作直觀,有些小缺陷,更新速度還行):
http://www.navicat.com/en/download/download.html
SQLite Administrator(古老,但還是有很多人覺(jué)得不錯(cuò),編碼支持不強(qiáng),可能亂碼):
http://sqliteadmin.orbmu2k.de/
FireFox管理SQLite的插件 SQLite Manager(沒(méi)多使用。看起來(lái)不錯(cuò)):
https://addons.mozilla.org/en-US/firefox/addon/5817/
SQLite參考資料:
開源有感系列 之開源數(shù)據(jù)庫(kù)有感[新內(nèi)容添加版本]:
http://www.cnblogs.com/unruledboy/archive/2005/02/04/98604.html
到底SQLite有多強(qiáng)?在我的2臺(tái)機(jī)器上的壓力測(cè)試:
http://www.cnblogs.com/unruledboy/archive/2005/03/26/sqliteperformance.html
Access和Firebird及SQLite的性能比較
http://www.cnblogs.com/kevin-moon/archive/2008/12/01/1344658.html
http://www.cnblogs.com/Kevin-moon/archive/2008/11/14/1333285.html
淺談SQLite——實(shí)現(xiàn)與應(yīng)用:
http://www.cnblogs.com/hustcat/archive/2010/01/27/1657821.html
SQLite數(shù)據(jù)庫(kù)是中小站點(diǎn)CMS的最佳選擇:
http://www.dbanotes.net/database/sqlite_cms.html
SQLite的局限性:
http://dev.firnow.com/course/7_databases/sql/sqlServer/200838/103309.html
sqlite常見問(wèn)題:
http://dev.firnow.com/course/7_databases/sql/sqlServer/200838/103310.html
MySQL大戰(zhàn)SQLite(PostgreSQL強(qiáng)勢(shì)亂入):
http://obmem.com/?p=493
★SQLite技術(shù)上的優(yōu)點(diǎn)和特性
SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫(kù)。既然號(hào)稱關(guān)系型數(shù)據(jù)庫(kù),支持SQL92標(biāo)準(zhǔn)中常用的玩意兒(比如視圖、事務(wù)、觸發(fā)器等)就是理所當(dāng)然的了,咱今天就不細(xì)說(shuō)了。今天主要聊聊一些有點(diǎn)特色的玩意兒。
◇輕量級(jí)
先說(shuō)它的第一個(gè)特色:輕量級(jí)。想必SQLite的作者很看重這個(gè)特性,連它的Logo都是用的“羽毛”,來(lái)顯擺它的輕飄飄。
SQLite和C/S模式的數(shù)據(jù)庫(kù)軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)庫(kù)引擎,因此不存在數(shù)據(jù)庫(kù)的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個(gè)動(dòng)態(tài)庫(kù),就可以享受它的全部功能。而且那個(gè)動(dòng)態(tài)庫(kù)的尺寸也挺小,3.6.27版本也就幾百K
◇綠色軟件
SQLite的另外一個(gè)特點(diǎn)是綠色:它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝環(huán)境”(如:Oledb等)。所以在部署的時(shí)候能夠省去不少麻煩。
◇單一文件
所謂的“單一文件”,就是數(shù)據(jù)庫(kù)中所有的信息(比如表、視圖、觸發(fā)器、等)都包含在一個(gè)文件內(nèi)。這個(gè)文件可以copy到其它目錄或其它機(jī)器上,也照用不誤。
◇跨平臺(tái)/可移植性
如果光支持主流操作系統(tǒng)(Windows,Linux),那就沒(méi)啥好吹噓的了。除了主流操作系統(tǒng),SQLite還支持了很多小型嵌入式系統(tǒng),比如Android、Windows Mobile、Symbin、Palm、VxWorks等,也就是說(shuō)iPhone,Android等手機(jī)上都可以用。
◇內(nèi)存數(shù)據(jù)庫(kù)(in-memory database)
這年頭,內(nèi)存越來(lái)越便宜,很多普通PC都開始以GB為單位來(lái)衡量?jī)?nèi)存(服務(wù)器就更甭提了)。這時(shí)候,SQLite的內(nèi)存數(shù)據(jù)庫(kù)特性就越發(fā)顯得好用。
SQLite的API不區(qū)分當(dāng)前操作的數(shù)據(jù)庫(kù)是在內(nèi)存還是在文件(對(duì)于存儲(chǔ)介質(zhì)是透明的)。所以如果你覺(jué)得磁盤I/O有可能成為瓶頸的話,可以考慮切換為內(nèi)存方式。切換的時(shí)候,操作SQLite的代碼基本不用大改,只要在開始時(shí)把文件Load到內(nèi)存,結(jié)束時(shí)把內(nèi)存的數(shù)據(jù)庫(kù)Dump回文件就OK了。在這種情況下,前面提到的“online backup API”就派上用場(chǎng)了,聰明的同學(xué)應(yīng)該明白我為啥這么期待backup功能了吧?
★技術(shù)上的缺點(diǎn)和不足
前面光聊了特性和優(yōu)點(diǎn),為了避免槍手寫軟文的嫌疑,再來(lái)說(shuō)說(shuō)SQLite的一些缺點(diǎn)。列位看官將來(lái)如果想用它,這些缺點(diǎn)要權(quán)衡一下。
◇并發(fā)訪問(wèn)的鎖機(jī)制
SQLite在并發(fā)(包括多進(jìn)程和多線程)讀寫方面的性能一直不太理想。數(shù)據(jù)庫(kù)可能會(huì)被寫操作獨(dú)占,從而導(dǎo)致其它讀寫操作阻塞或出錯(cuò)。
◇SQL標(biāo)準(zhǔn)支持不全
在它的官方網(wǎng)站上,具體列舉了不支持哪些SQL92標(biāo)準(zhǔn)。我個(gè)人感覺(jué)比較不爽的是不支持外鍵約束。
◇網(wǎng)絡(luò)文件系統(tǒng)(以下簡(jiǎn)稱NFS)
有時(shí)候需要訪問(wèn)其它機(jī)器上的SQLite數(shù)據(jù)庫(kù)文件,就會(huì)把數(shù)據(jù)庫(kù)文件放置到網(wǎng)絡(luò)共享目錄上。這時(shí)候你就要小心了。當(dāng)SQLite文件放置于NFS時(shí),在并發(fā)讀寫的情況下可能會(huì)出問(wèn)題(比如數(shù)據(jù)損壞)。原因據(jù)說(shuō)是由于某些NFS的文件鎖實(shí)現(xiàn)上有Bug。
★編程語(yǔ)言接口
SQLite支持很多種語(yǔ)言的編程接口。這對(duì)于我這種喜歡混用多種編程語(yǔ)言的人來(lái)說(shuō),是很爽的。下面我大概介紹一下。
◇C/C++
由于SQLite本身是C寫的,它自帶的API也是C接口的。所以C/C++用起來(lái)最直接了。假如你不喜歡面向過(guò)程的C API風(fēng)格,可以另外找個(gè)C++的包裝庫(kù)。想重新發(fā)明輪子的同學(xué),也可以自己包裝一個(gè)。
◇Java
如果要用Java訪問(wèn)SQLite,可以通過(guò)SQLite的JDBC驅(qū)動(dòng),或者通過(guò)專門的SQLite包裝庫(kù)。我個(gè)人建議走JDBC方式,萬(wàn)一將來(lái)要換數(shù)據(jù)庫(kù),代碼就不用大改。
◇Python
pysqlite是Python操作SQLite的首選。從Python 2.5開始,它已經(jīng)被整合到Python的標(biāo)準(zhǔn)庫(kù)中。看來(lái)Python社區(qū)還是蠻喜歡SQLite嘛。
◇.net
對(duì)于喜歡.net的同學(xué),可以通過(guò)System.Data.SQLite來(lái)訪問(wèn)。
◇Ruby
Ruby可以通過(guò)SQLite-Ruby操作SQLite數(shù)據(jù)庫(kù),不過(guò)我沒(méi)用過(guò)。
◇Perl
在CPAN上有DBD::SQLite,不過(guò)我也沒(méi)用過(guò)。
★一些非技術(shù)的參考因素
前面講的都是技術(shù)層面的話題,如果你考慮在公司的商業(yè)軟件項(xiàng)目中使用SQLite。還需要根據(jù)“如何選擇開源項(xiàng)目”里面提到的幾個(gè)參考因素,再評(píng)估一下。
◇授權(quán)協(xié)議(License)
SQLite使用的是Public Domain協(xié)議,這是最爽一種,可以放心大膽地用。
◇用戶的普及程度
最近這幾年,使用SQLite的人越來(lái)越多(從Google Trends可以反應(yīng)出來(lái))。包括一些大公司也開始把它整合到產(chǎn)品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。這說(shuō)明它的健壯性、穩(wěn)定性等方面不會(huì)有太大問(wèn)題。
◇開發(fā)的活躍程度
如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2個(gè)月都會(huì)有更新。說(shuō)明開發(fā)的活躍度還是非常高的。
從上述幾個(gè)非技術(shù)因素來(lái)看,SQLite用于商業(yè)公司的軟件項(xiàng)目還是非常靠譜的。