首頁  >  文章  >  後端開發  >  2016年應該使用SQLite的5大原因

2016年應該使用SQLite的5大原因

WBOY
WBOY原創
2016-07-29 09:06:481098瀏覽

2016年應該使用SQLite的5大原因
什麼?你還不知道SQLite?那我告訴你,SQLite是一個了不起的資料庫,能夠在實際生產環境中做真正的工作。在這篇文章中,我將簡要說明5個我認為你應該在2016年使用SQLite的原因。
1.管理簡單。你以前管理過Postgres資料庫嗎?為了確保資料庫伺服器的正確配置(共享緩衝區,有效快取大小,work mem,維護work mem,wal緩衝區…),你需要理解和學習相當多的東西。升級可以說是一個可怕的過程,而且,你可能需要脫機使用資料庫,運行專門的升級程序,然後在心裡默默期盼當你備​​份回來的時候它還能繼續工作。此外,你知道你的Postgres資料庫究竟儲存在哪裡嗎?你能隨便指一個地方,說,「那就是我的資料庫」嗎? (眾所周知的是,有很多情況下只能使用Postgres(或MySQL,Oracle,SQL Server等)來滿足應用程式的需求。但我在這裡這麼說的目的,並非如此。我只是想突出說明管理SQLite 資料庫和其他典型資料庫伺服器之間的區別。文件格式在許多主要的版本上都非常穩定,所以假設我有一個從3.0.0版本(在2004年)開始的SQLite資料庫文件,那麼我也可以使用最新的SQLite 3.10.0讀取它。如果我想將資料庫檔案放到一個USB隨身碟中,那麼我只要複製文件,或者更好的做法是將文件保存在dropbox資料夾中。如果我想每天晚上備份,那麼我只要同步資料庫檔案到S3。如果我想分享一些和同事一起做的資料分析,那麼完全可以傳送一份資料庫檔案的副本給他們,然後他們就可以使用了。資料庫以單一檔案的形式存在,且具備穩定的格式,是SQLite的特色。
更重要的是,SQLite很容易設定。 SQLite的功能可以透過兩種方式進行管理:編譯標誌和PRAGMA 語句(執行時期設定)。沒有所謂的配置文件,你只需要建立你想要的庫,然後在你創建資料庫連接時,配置運行時選項。
2.不斷提高又堅如磐石的穩定性。 SQLite是由一些真正了不起的軟體工程師積極開發的。高品質的新功能正以一種驚人的速度被添加進來。就在最近,SQLite透過json1擴充增加了對JSON資料的支援。 SQLite還發布了全文檢索擴展的改進版本,其中包括使用BM25演算法的結果排名。除了增加新的功能,SQLite的開發人員也正在努力使程式庫擁有更多的效能。在3.8.11版本中,發布說明中包含這條小介紹:SQLite現在的運行速度是3.8.0版本的兩倍,3.3.9版本的三倍。
儘管出現了這麼多的變化和改進,但SQLite很少引入bug。 SQLite的測試套件被廣泛認為是業界最好的測試套件之一,而關於SQLite如何測試的頁面經常出現在HackerNews上,因為開發人員前赴後繼地發現了這篇令人印象深刻的文件。
3.可擴展和可控制。關於SQLite,我個人最喜歡的特點是它的可擴展性。由於SQLite是透過應用程式嵌入進去的,所以它運行在相同的位址空間裡,並且可以代你執行應用程式程式碼。無論是Python標準函式庫SQLite驅動程式-pysqlite,還是選用磁碟機aspw,都可以提供定義了自訂SQL函數、聚合函數和歸類的API。 aspw更進一步,提供的API還可以用來定義虛擬表和虛擬檔案系統!虛擬表,目前唯一由aspw支持,允許你在程式碼中定義一個表,然後查詢它,好像它是一個普通的SQL表,即使備份資料可能完全是動態的。例如,我寫了一個簡單的虛擬表,可以讓你查詢Redis就好像它是一個SQL表。
你也可以寫同名的函數,它是用來回傳0…n行結果的函數。其中一個例子是一個正規表示式檢索函數,處理輸入和產生匹配令牌的行。我寫了一個函式庫,sqlite-vtfunc,它可以讓我們寫這些類型的函數變得非常容易。實際上,SQLite的每個方面都透過你的應用程式來操作。
4.快如閃電。 SQLite非常快。由於它運行在同一台機器上,所以在執行查詢或讀取結果時是沒有網路負擔的。又因為它運作在相同的位址空間,所以沒有線路協定、序列化,也不需要透過unix套接字進行通訊。當資源稀缺和效率是至關重要的時候,SQLite還可以運作在行動裝置上。 SQLite也支援大量的編譯標識,讓你刪除你不打算使用的功能。
SQLite的速度彌補了它最大的缺點之一,那就是資料庫檔案鎖定寫入。令人難以置信的快速寫數據,只當有大量的並發寫提供服務時,資料庫鎖定才會成為一個問題。
5、WAL模式。 SQLite的3.7.0版本中補充了一種利用預寫日誌的新日誌記錄方法。雖然其本身真不算是令人振奮的消息,但這對web應用程式開發人員(或任何處理並發的人員)意味著讀的服務不會再阻塞寫的服務,反之亦然。換言之就是,讀和寫可以同時發生。如果沒有WAL模式,那麼要想寫入資料庫,寫的服務則需要獨佔存取資料庫,並且不能發生讀取的服務,直到寫入的服務結束。然而,值得一提的是,即使你不啟用WAL模式,寫的服務通常發生在毫秒間。這個時間是如此是短,以致於只有當你並發很高或寫的事務非常長時,才會注意到出現問題。
加分原因:BerkeleyDB。 BerkeleyDB的SQLite集成,能夠給予應用程式開發人員所需的並發資料庫存取甚至更好的效能,因為它不是鎖定整個資料庫,BerkeleyDB只需要鎖定的個別的頁面即可。這允許BerkeleyDB在並發資料庫負載下更有效地規模化,提供的事務不會爭奪相同頁面的資料。 BerkeleyDB也支援多版本並發控制(MVCC),允許讀取的操作繼續發生在資料頁面上,透過一個寫入的事務來處理資料。
BerkeleyDB還有一個好處是提高了效率。換句話說,BerkeleyDB可使用較少的系統資源,執行較少的系統呼叫。你可以在此白皮書中和這篇簡要的技術概述中閱讀更多細節。 BerkeleyDB的SQL介面是SQLite的一個插入式替換,並且支援相同的API和功能。 BerkeleyDB提供了一些附加功能,例如複製(SQLite有備份工具,但我認為它不如BDB的強大)、加密,當然還有BerkeleyDB本身的所有功能。
使用BerkeleyDB的一個主要缺點是,它是配置值非常敏感,而且要想獲取正確的頁面大小,緩存大小以及其他設置,需要很深厚的知識造詣。另一個缺點是許可證——閱讀更多關於BerkeleyDB許可證的內容,查看Oracle的授權頁面。
最後,希望你能嘗試SQLite。不要聽信那些因循守舊的人說它不適於生產,或不適合在web應用中使用它的一面虛詞。
如果您想了解更多,SQLite本身就有一個很好地介紹了何時使用SQLite的文檔,其中還包括了讓另一個RDBMS更好地工作的一系列情況。
兄弟會高洛峰免費收徒:http://www.hdb.com/party/lzcw-comm.html
免費領取LAMP兄弟連原創PHP影片教學光碟/《細講PHP》精要版,詳情諮詢官網客服:
http://www.lampbrother.net
【兄弟連IT教育】學PHP、Linux、HTML5、UI、Android等影片教學(課件+筆記+影片)!
網盤教學下載:http://pan.baidu.com/s/1sjOJiAL

以上就介紹了2016年應該使用SQLite的5大原因,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn