SQlite 學習資料

  頗有用的開源跨平臺數據庫,能夠做爲客戶端的小型內存數據庫使用,聽說它有N多用戶(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飛信,Chrome,FireFox),記錄下。
  下文轉自:
php

 http://www.cppblog.com/weiym/archive/2012/10/16/193357.html
    http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html
html


    在實際的應用中,SQLite做爲目前最爲流行的開源嵌入式關係型數據庫,在系統的架構設計中正在扮演着愈來愈爲重要的角色。和不少其它嵌入式NoSQL數據庫不一樣的是,SQLite支持不少關係型數據庫的基本特徵,這在數據移植、程序演示等應用中有着不可替代的優點。從官方文檔中咱們能夠獲悉到,SQLite支持的數據量和運行效率都是很是驕人的,所以在海量數據的解決方案中,SQLite能夠做爲數據預計算的橋頭堡,從而顯著減小存儲在關係型數據庫服務器中的數據數量,最終提升系統的查詢效率和運行期效率,同時也能夠顯著的下降數據備份的磁盤開銷。這裏提供了該系列博文的目錄,以方便網友和我我的的學習與參閱。
      Finally, if you are interseting in my series blogs, please pay more attention on my following ones, such as Redis, MongoDB, Lua and PostgreSQL. Thank you for your reading and comments, that will give me more effective encouragement and stimulate me to move ahead with stable and continuous. web

 

SQLite學習手冊(開篇)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/09/2317603.html
1、簡介
2、SQLite的主要優勢
3、和RDBMS相比SQLite的一些劣勢
4、個性化特徵

SQLite學習手冊(C/C++接口簡介)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2321386.html
1、概述
2、核心對象和接口
3、參數綁定

SQLite學習手冊(數據表和視圖)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2321668.html
1、建立數據表
2、表的修改
3、表的刪除
4、建立視圖
5、刪除視圖

SQLite學習手冊(內置函數)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2322027.html
1、聚合函數
2、核心函數
3、日期和時間函數

SQLite學習手冊(索引和數據分析/清理)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/14/2322335.html
1、建立索引
2、刪除索引
3、重建索引
4、數據分析
5、數據清理

SQLite學習手冊(數據庫和事物)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/14/2322575.html
1、Attach數據庫
2、Detach數據庫
3、事物

SQLite學習手冊(表達式)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/16/2323907.html
1、經常使用表達式
2、條件表達式
3、轉換表達式

SQLite學習手冊(數據類型)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2325258.html
1、存儲種類和數據類型
2、類型親緣性
3、比較表達式
4、操做符

SQLite學習手冊(命令行工具)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2325981.html

SQLite學習手冊(在線備份)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/19/2326309.html
1、經常使用備份
2、在線備份APIs簡介
3、高級應用技巧

SQLite學習手冊(內存數據庫)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/20/2328348.html
1、內存數據庫
2、臨時數據庫

SQLite學習手冊(臨時文件)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/21/2328483.html
1、簡介
2、具體說明
3、相關的編譯時參數和指令
4、其它優化策略

SQLite學習手冊(鎖和併發控制)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328753.html
1、概述
2、文件鎖
3、回滾日誌
4、數據寫入
5、SQL級別的事物控制

SQLite學習手冊(實例代碼<一>)
http://www.cnblogs.com/stephen-liu74/archive/2012/02/07/2340780.html
1、獲取表的Schema信息
2、常規數據插入

SQLite學習手冊(實例代碼<二>)
http://www.cnblogs.com/stephen-liu74/archive/2012/02/07/2341480.html
3、高效的批量數據插入
4、數據查詢


sql

哪些人,哪些公司或軟件在用SQLite:

Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飛信,Chrome,FireFox
可見SQLite的穩定性及性能是不會有什麼問題的,詳細列表請參見:http://www.sqlite.org/famous.html數據庫

網上關於SQLite的介紹一抓一大把,總結起來,他有以下特色:編程

SQLite優勢及適應場合:

輕量級
綠色組件
單一文件
跨平臺
查詢效率極高
使用事務插入速度極快
支持limit分頁
適合查詢速度要求較高,內存佔用較少的場合,尤爲是嵌入式操做系統,如各類手機操做系統,低併發web(99.9%網站是低併發),php環境裏原生支持SQLite,asp.net/.net winform裏能夠很方便的使用System.Data.SQLitewindows

缺點與不適應場合:

不適合併發性高的場合 如大量insert,update訪問,SQL標準支持不全服務器

SQLite vs Access

SQLite官方網站沒有與Access對比的說明,我以爲應該是:SQLite是開源的,單文件,不只能夠運行在Windows上,也能夠運行在各類Linux系統上,而他的不少場合跟Access是不一樣的,他的優點足以站在一個比Access更高的位置,因此沒有可比性,但咱們普通人拿Access跟SQLite比,是由於他們交集的地方,關係到咱們取捨。網絡

交集處有:windows系統裏web/winform,多線程

在個人測試中
一次插入5行及以上,每行有20來個字符,SQLite使用事務速度遠快於access
一次插入多行,每行有8000以上字符,SQLite使用事務速度 快於 access 一倍左右
SQLite查詢速度極快,甚至快過SQL Server 2008 r2 10倍(由於MSSQL索引列不能超過900個字符,因此varchar(max)不能建索引)
單條數據插入速度比Access略慢,事務插入大量數據,在每行數據量不大時,遠快於Access
Access常常出現數據庫壞的狀況,SQLite據說沒有這個問題。
 

SQLite極速Select測試

一樣的數據,一樣的SQL語句:
SELECT * FROM dbo.Articles WHERE txtContent LIKE '%柳永法%'
在SQLite及MSSQL上執行效率讓人震撼,SQLite居然快MSSQL 10倍,
而且SQLite沒有進程只看到程序進程內存沒有任何升高,而MSSQL的進程則從1G多升到了3G多

數據庫 條數 查詢用時
SQLite 118848 60s
MSSQL 118848 540s
     
SQLite 7428 6s
MSSQL 7428 60s

 

關於SQLite多線程及ASP.net併發測試

  1. //Winform 1000個線程同時操做,僅cpu佔用很高外,數據正常插入,沒有使用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", "標題"+obj),  
  10.         new SQLiteParameter("@txtContent", "內容能夠大於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進行1000個線程的壓力測試1分鐘,使用Elmah.dll記錄錯誤,測試後沒發現程序報錯,也只是很佔CPU而已

經過本人測試,SQLite也應該算是比較適合高併發,及多線程,但官方說不適合,不知道是否是我測試方法不對

SQLite資源地址:

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

SQLite中文站:
http://www.sqlite.com.cn/

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

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

SQLite GUI圖形管理工具:

SQLite Expert(可選數據庫編碼,支持原生配置各類參數,軟件更新速度極快,一天一個或多個版本,經試用,發現還有不少不完善的地方):
http://www.sqliteexpert.com/download.html

Navicat for SQLite(導入,導出功能強大,功能實用,操做直觀,有些小缺陷,更新速度還行):
http://www.navicat.com/en/download/download.html

SQLite Administrator(古老,但仍是有不少人以爲不錯,編碼支持不強,可能亂碼):
http://sqliteadmin.orbmu2k.de/

FireFox管理SQLite的插件 SQLite Manager(沒多使用。看起來不錯):
https://addons.mozilla.org/en-US/firefox/addon/5817/

 

SQLite參考資料:

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

到底SQLite有多強?在個人2臺機器上的壓力測試:
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——實現與應用:
http://www.cnblogs.com/hustcat/archive/2010/01/27/1657821.html

SQLite數據庫是中小站點CMS的最佳選擇:
http://www.dbanotes.net/database/sqlite_cms.html

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

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

MySQL大戰SQLite(PostgreSQL強勢亂入):
http://obmem.com/?p=493


★SQLite技術上的優勢和特性

  SQLite是一個輕量級、跨平臺的關係型數據庫。既然號稱關係型數據庫,支持SQL92標準中經常使用的玩意兒(好比視圖、事務、觸發器等)就是理所固然的了,咱今天就不細說了。今天主要聊聊一些有點特點的玩意兒。

  ◇輕量級
  先說它的第一個特點:輕量級。想必SQLite的做者很看重這個特性,連它的Logo都是用的「羽毛」,來顯擺它的輕飄飄。

SQLite和C/S模式的數據庫軟件不一樣,它是進程內的數據庫引擎,所以不存在數據庫的客戶端和服務器。使用SQLite通常只須要帶上它的一個動態庫,就能夠享受它的所有功能。並且那個動態庫的尺寸也挺小,3.6.27版本也就幾百K

  ◇綠色軟件
SQLite的另一個特色是綠色:它的核心引擎自己不依賴第三方的軟件,使用它也不須要「安裝環境」(如:Oledb等)。因此在部署的時候可以省去很多麻煩。

  ◇單一文件
所謂的「單一文件」,就是數據庫中全部的信息(好比表、視圖、觸發器、等)都包含在一個文件內。這個文件能夠copy到其它目錄或其它機器上,也照用不誤。

  ◇跨平臺/可移植性
  若是光支持主流操做系統(Windows,Linux),那就沒啥好吹噓的了。除了主流操做系統,SQLite還支持了不少小型嵌入式系統,好比Android、Windows Mobile、Symbin、Palm、VxWorks等,也就是說iPhone,Android等手機上均可以用。

  ◇內存數據庫(in-memory database)
這年頭,內存愈來愈便宜,不少普通PC都開始以GB爲單位來衡量內存(服務器就更甭提了)。這時候,SQLite的內存數據庫特性就愈加顯得好用。
SQLite的API不區分當前操做的數據庫是在內存仍是在文件(對於存儲介質是透明的)。因此若是你以爲磁盤I/O有可能成爲瓶頸的話,能夠考慮切換爲內存方式。切換的時候,操做SQLite的代碼基本不用大改,只要在開始時把文件Load到內存,結束時把內存的數據庫Dump迴文件就OK了。在這種狀況下,前面提到的「online backup API」就派上用場了,聰明的同窗應該明白我爲啥這麼期待backup功能了吧?

★技術上的缺點和不足

  前面光聊了特性和優勢,爲了不槍手寫軟文的嫌疑,再來講說SQLite的一些缺點。列位看官未來若是想用它,這些缺點要權衡一下。

  ◇併發訪問的鎖機制
SQLite在併發(包括多進程和多線程)讀寫方面的性能一直不太理想。數據庫可能會被寫操做獨佔,從而致使其它讀寫操做阻塞或出錯。

  ◇SQL標準支持不全
在它的官方網站上,具體列舉了不支持哪些SQL92標準。我我的感受比較不爽的是不支持外鍵約束。

  ◇網絡文件系統(如下簡稱NFS)
  有時候須要訪問其它機器上的SQLite數據庫文件,就會把數據庫文件放置到網絡共享目錄上。這時候你就要當心了。當SQLite文件放置於NFS時,在併發讀寫的狀況下可能會出問題(好比數據損壞)。緣由聽說是因爲某些NFS的文件鎖實現上有Bug。

★編程語言接口

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

  ◇C/C++
  因爲SQLite自己是C寫的,它自帶的API也是C接口的。因此C/C++用起來最直接了。假如你不喜歡面向過程的C API風格,能夠另外找個C++的包裝庫。想從新發明輪子的同窗,也能夠本身包裝一個。

◇Java
若是要用Java訪問SQLite,能夠經過SQLite的JDBC驅動,或者經過專門的SQLite包裝庫。我我的建議走JDBC方式,萬一未來要換數據庫,代碼就不用大改。
◇Python
pysqlite是Python操做SQLite的首選。從Python 2.5開始,它已經被整合到Python的標準庫中。看來Python社區仍是蠻喜歡SQLite嘛。
◇.net
對於喜歡.net的同窗,能夠經過System.Data.SQLite來訪問。
◇Ruby
Ruby能夠經過SQLite-Ruby操做SQLite數據庫,不過我沒用過。
◇Perl
在CPAN上有DBD::SQLite,不過我也沒用過。

★一些非技術的參考因素

  前面講的都是技術層面的話題,若是你考慮在公司的商業軟件項目中使用SQLite。還須要根據「如何選擇開源項目」裏面提到的幾個參考因素,再評估一下。
◇受權協議(License)
SQLite使用的是Public Domain協議,這是最爽一種,能夠放心大膽地用。
◇用戶的普及程度
最近這幾年,使用SQLite的人愈來愈多(從Google Trends能夠反應出來)。包括一些大公司也開始把它整合到產品中(好比Google的Gears、Apple的Safari、Adobe的AIR)。這說明它的健壯性、穩定性等方面不會有太大問題。
◇開發的活躍程度
若是到SQLite的Change Log上大體瞭解一下,能夠看出最近5年基本上每1-2個月都會有更新。說明開發的活躍度仍是很是高的。
從上述幾個非技術因素來看,SQLite用於商業公司的軟件項目仍是很是靠譜的。

相關文章
相關標籤/搜索