一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

SQLite介紹、學(xué)習(xí)筆記、性能測試

 凱之風(fēng) 2011-07-01

Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飛信,Chrome,F(xiàn)ireFox
可見SQLite的穩(wěn)定性及性能是不會有什么問題的,詳細(xì)列表請參見:http://www./famous.html。

網(wǎng)上關(guān)于SQLite的介紹一抓一大把,總結(jié)起來,他有如下特點:

SQLite優(yōu)點及適應(yīng)場合:

輕量級
綠色組件
單一文件
跨平臺
查詢效率極高
使用事務(wù)插入速度極快
支持limit分頁
適合查詢速度要求較高,內(nèi)存占用較少的場合,尤其是嵌入式操作系統(tǒng),如各種手機(jī)操作系統(tǒng),低并發(fā)web(99.9%網(wǎng)站是低并發(fā)),php環(huán)境里原生支持SQLite,asp.net/.net winform里可以很方便的使用System.Data.SQLite

缺點與不適應(yīng)場合:

不適合并發(fā)性高的場合 如大量insert,update訪問,SQL標(biāo)準(zhǔn)支持不全

SQLite vs Access

SQLite官方網(wǎng)站沒有與Access對比的說明,我覺得應(yīng)該是:SQLite是開源的,單文件,不僅可以運(yùn)行在Windows上,也可以運(yùn)行在各種Linux系統(tǒng)上,而他的很多場合跟Access是不同的,他的優(yōu)勢足以站在一個比Access更高的位置,所以沒有可比性,但我們普通人拿Access跟SQLite比,是因為他們交集的地方,關(guān)系到我們?nèi)∩帷?/p>

交集處有:windows系統(tǒng)里web/winform,

在我的測試中
一次插入5行及以上,每行有20來個字符,SQLite使用事務(wù)速度遠(yuǎn)快于access
一次插入多行,每行有8000以上字符,SQLite使用事務(wù)速度 快于 access 一倍左右
SQLite查詢速度極快,甚至快過SQL Server 2008 r2 10倍(因為MSSQL索引列不能超過900個字符,所以varchar(max)不能建索引)
單條數(shù)據(jù)插入速度比Access略慢,事務(wù)插入大量數(shù)據(jù),在每行數(shù)據(jù)量不大時,遠(yuǎn)快于Access
Access經(jīng)常出現(xiàn)數(shù)據(jù)庫壞的情況,SQLite聽說沒有這個問題。
 

SQLite極速Select測試

同樣的數(shù)據(jù),同樣的SQL語句:
SELECT * FROM dbo.Articles WHERE txtContent LIKE '%柳永法%'
在SQLite及MSSQL上執(zhí)行效率讓人震撼,SQLite竟然快MSSQL 10倍,
并且SQLite沒有進(jìn)程只看到程序進(jìn)程內(nèi)存沒有任何升高,而MSSQL的進(jìn)程則從1G多升到了3G多

數(shù)據(jù)庫條數(shù)查詢用時
SQLite11884860s
MSSQL118848540s
   
SQLite74286s
MSSQL742860s

 

關(guān)于SQLite多線程及ASP.net并發(fā)測試

  1. //Winform 1000個線程同時操作,僅cpu占用很高外,數(shù)據(jù)正常插入,沒有使用Lock  
  2. ThreadPool.SetMinThreads(1000, 1000);  
  3. ThreadPool.SetMaxThreads(1000, 1000);  
  4. for (int i = 0; i < 1000; i++)  
  5. {  
  6.     ThreadPool.QueueUserWorkItem((obj) =>  
  7.     {  
  8.         SQLiteParameter[] parms ={  
  9.         new SQLiteParameter("@txtTitle""標(biāo)題"+obj),  
  10.         new SQLiteParameter("@txtContent""內(nèi)容可以大于8000"+obj+new string('=',8000+1000)),  
  11.         new SQLiteParameter("@Adder""添加人"+obj),  
  12.         new SQLiteParameter("@AddTime", DateTime.Now),  
  13.         new SQLiteParameter("@DeptId", 1),  
  14.         };  
  15.           
  16.         SQLiteHelper.ExecuteNonQuery(SQLiteConnectionString, CommandType.Text, @"  
  17.         insert into Articles(txtTitle,txtContent,Adder,AddTime,DeptId) values (@txtTitle,@txtContent,@Adder,@AddTime,@DeptId)  
  18.         ", parms);  
  19.       
  20.     }, i);  
  21. }  

ASP.net使用Microsoft Web Application Stress Tool進(jìn)行1000個線程的壓力測試1分鐘,使用Elmah.dll記錄錯誤,測試后沒發(fā)現(xiàn)程序報錯,也只是很占CPU而已

通過本人測試,SQLite也應(yīng)該算是比較適合高并發(fā),及多線程,但官方說不適合,不知道是不是我測試方法不對

SQLite資源地址:

SQLite的官方主頁:
http://www./

SQLite中文站:
http://www./

System.Data.SQLite:
http://sqlite./

sql學(xué)習(xí)筆記之 嵌入式數(shù)據(jù)庫(sqlite,firebird)
http://www.cnblogs.com/ljzforever/archive/2010/03/09/1681453.html

SQLite GUI圖形管理工具:

SQLite Expert(可選數(shù)據(jù)庫編碼,支持原生配置各種參數(shù),軟件更新速度極快,一天一個或多個版本,經(jīng)試用,發(fā)現(xiàn)還有很多不完善的地方):
http://www./download.html

Navicat for SQLite(導(dǎo)入,導(dǎo)出功能強(qiáng)大,功能實用,操作直觀,有些小缺陷,更新速度還行):
http://www./en/download/download.html

SQLite Administrator(古老,但還是有很多人覺得不錯,編碼支持不強(qiáng),可能亂碼):
http://sqliteadmin./

FireFox管理SQLite的插件 SQLite Manager(沒多使用??雌饋聿诲e):
https://addons.mozilla.org/en-US/firefox/addon/5817/

 

SQLite參考資料:

開源有感系列 之開源數(shù)據(jù)庫有感[新內(nèi)容添加版本]:
http://www.cnblogs.com/unruledboy/archive/2005/02/04/98604.html

到底SQLite有多強(qiáng)?在我的2臺機(jī)器上的壓力測試:
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——實現(xiàn)與應(yīng)用:
http://www.cnblogs.com/hustcat/archive/2010/01/27/1657821.html

SQLite數(shù)據(jù)庫是中小站點CMS的最佳選擇:
http://www./database/sqlite_cms.html

SQLite的局限性:
http://dev./course/7_databases/sql/sqlServer/200838/103309.html

sqlite常見問題:
http://dev./course/7_databases/sql/sqlServer/200838/103310.html

MySQL大戰(zhàn)SQLite(PostgreSQL強(qiáng)勢亂入):
http:///?p=493


★SQLite技術(shù)上的優(yōu)點和特性

  SQLite是一個輕量級、跨平臺的關(guān)系型數(shù)據(jù)庫。既然號稱關(guān)系型數(shù)據(jù)庫,支持SQL92標(biāo)準(zhǔn)中常用的玩意兒(比如視圖、事務(wù)、觸發(fā)器等)就是理所當(dāng)然的了,咱今天就不細(xì)說了。今天主要聊聊一些有點特色的玩意兒。

  ◇輕量級
  先說它的第一個特色:輕量級。想必SQLite的作者很看重這個特性,連它的Logo都是用的“羽毛”,來顯擺它的輕飄飄。
SQLite和C/S模式的數(shù)據(jù)庫軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個動態(tài)庫,就可以享受它的全部功能。而且那個動態(tài)庫的尺寸也挺小,3.6.27版本也就幾百K

  ◇綠色軟件
SQLite的另外一個特點是綠色:它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝環(huán)境”(如:Oledb等)。所以在部署的時候能夠省去不少麻煩。

  ◇單一文件
所謂的“單一文件”,就是數(shù)據(jù)庫中所有的信息(比如表、視圖、觸發(fā)器、等)都包含在一個文件內(nèi)。這個文件可以copy到其它目錄或其它機(jī)器上,也照用不誤。

  ◇跨平臺/可移植性
  如果光支持主流操作系統(tǒng)(Windows,Linux),那就沒啥好吹噓的了。除了主流操作系統(tǒng),SQLite還支持了很多小型嵌入式系統(tǒng),比如Android、Windows Mobile、Symbin、Palm、VxWorks等,也就是說iPhone,Android等手機(jī)上都可以用。

  ◇內(nèi)存數(shù)據(jù)庫(in-memory database)
這年頭,內(nèi)存越來越便宜,很多普通PC都開始以GB為單位來衡量內(nèi)存(服務(wù)器就更甭提了)。這時候,SQLite的內(nèi)存數(shù)據(jù)庫特性就越發(fā)顯得好用。
SQLite的API不區(qū)分當(dāng)前操作的數(shù)據(jù)庫是在內(nèi)存還是在文件(對于存儲介質(zhì)是透明的)。所以如果你覺得磁盤I/O有可能成為瓶頸的話,可以考慮切換為內(nèi)存方式。切換的時候,操作SQLite的代碼基本不用大改,只要在開始時把文件Load到內(nèi)存,結(jié)束時把內(nèi)存的數(shù)據(jù)庫Dump回文件就OK了。在這種情況下,前面提到的“online backup API”就派上用場了,聰明的同學(xué)應(yīng)該明白我為啥這么期待backup功能了吧?

★技術(shù)上的缺點和不足

  前面光聊了特性和優(yōu)點,為了避免槍手寫軟文的嫌疑,再來說說SQLite的一些缺點。列位看官將來如果想用它,這些缺點要權(quán)衡一下。

  ◇并發(fā)訪問的鎖機(jī)制
SQLite在并發(fā)(包括多進(jìn)程和多線程)讀寫方面的性能一直不太理想。數(shù)據(jù)庫可能會被寫操作獨占,從而導(dǎo)致其它讀寫操作阻塞或出錯。

  ◇SQL標(biāo)準(zhǔn)支持不全
在它的官方網(wǎng)站上,具體列舉了不支持哪些SQL92標(biāo)準(zhǔn)。我個人感覺比較不爽的是不支持外鍵約束。

  ◇網(wǎng)絡(luò)文件系統(tǒng)(以下簡稱NFS)
  有時候需要訪問其它機(jī)器上的SQLite數(shù)據(jù)庫文件,就會把數(shù)據(jù)庫文件放置到網(wǎng)絡(luò)共享目錄上。這時候你就要小心了。當(dāng)SQLite文件放置于NFS時,在并發(fā)讀寫的情況下可能會出問題(比如數(shù)據(jù)損壞)。原因據(jù)說是由于某些NFS的文件鎖實現(xiàn)上有Bug。

★編程語言接口

  SQLite支持很多種語言的編程接口。這對于我這種喜歡混用多種編程語言的人來說,是很爽的。下面我大概介紹一下。

  ◇C/C++
  由于SQLite本身是C寫的,它自帶的API也是C接口的。所以C/C++用起來最直接了。假如你不喜歡面向過程的C API風(fēng)格,可以另外找個C++的包裝庫。想重新發(fā)明輪子的同學(xué),也可以自己包裝一個。
◇Java
如果要用Java訪問SQLite,可以通過SQLite的JDBC驅(qū)動,或者通過專門的SQLite包裝庫。我個人建議走JDBC方式,萬一將來要換數(shù)據(jù)庫,代碼就不用大改。
◇Python
pysqlite是Python操作SQLite的首選。從Python 2.5開始,它已經(jīng)被整合到Python的標(biāo)準(zhǔn)庫中。看來Python社區(qū)還是蠻喜歡SQLite嘛。
◇.net
對于喜歡.net的同學(xué),可以通過System.Data.SQLite來訪問。
◇Ruby
Ruby可以通過SQLite-Ruby操作SQLite數(shù)據(jù)庫,不過我沒用過。
◇Perl
在CPAN上有DBD::SQLite,不過我也沒用過。

★一些非技術(shù)的參考因素

  前面講的都是技術(shù)層面的話題,如果你考慮在公司的商業(yè)軟件項目中使用SQLite。還需要根據(jù)“如何選擇開源項目”里面提到的幾個參考因素,再評估一下。
◇授權(quán)協(xié)議(License)
SQLite使用的是Public Domain協(xié)議,這是最爽一種,可以放心大膽地用。
◇用戶的普及程度
最近這幾年,使用SQLite的人越來越多(從Google Trends可以反應(yīng)出來)。包括一些大公司也開始把它整合到產(chǎn)品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。這說明它的健壯性、穩(wěn)定性等方面不會有太大問題。
◇開發(fā)的活躍程度
如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2個月都會有更新。說明開發(fā)的活躍度還是非常高的。
從上述幾個非技術(shù)因素來看,SQLite用于商業(yè)公司的軟件項目還是非??孔V的。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    婷婷九月在线中文字幕| 男女一进一出午夜视频| 91国内视频一区二区三区| 91人人妻人人爽人人狠狠| 色婷婷视频在线精品免费观看| 国产精品成人一区二区在线| 国产亚洲视频香蕉一区| 日韩不卡一区二区三区色图| 国产午夜在线精品视频| 日本福利写真在线观看| 国产亚洲系列91精品| 在线观看视频成人午夜| 亚洲av专区在线观看| 日韩欧美在线看一卡一卡| 国产av一区二区三区四区五区| 精品少妇一区二区视频| 热久久这里只有精品视频| 国产一区二区三区四区免费| 国产日韩精品激情在线观看 | 人妻一区二区三区多毛女| 又黄又爽禁片视频在线观看| 欧美日韩无卡一区二区| 国产欧美日韩精品成人专区| 色婷婷视频国产一区视频| 日韩精品免费一区二区三区| 亚洲美女国产精品久久| 国产欧美另类激情久久久| 亚洲丁香婷婷久久一区| 成人精品一区二区三区在线| 偷拍偷窥女厕一区二区视频| 蜜臀人妻一区二区三区| 大屁股肥臀熟女一区二区视频| 亚洲中文字幕视频一区二区| 91欧美日韩精品在线| 欧美三级精品在线观看| 国产中文另类天堂二区| 欧美日韩国产一级91| 日韩精品综合福利在线观看| 91精品日本在线视频| 欧美日韩国产成人高潮| 天堂网中文字幕在线视频|