我們應該使用SQLite的5大原因


 

  1.管理簡單

  你以前管理過Postgres數據庫嗎?為了確保數據庫服務器的正確配置(共享緩沖區,有效緩存大小,work mem,維護work mem,wal緩沖區…),你需要理解和學習相當多的東西。升級可以說是一個可怕的過程,並且,你可能需要脫機使用數據庫,運行專門的升級程序,然后在心里默默期盼當你備份回來的時候它還能繼續工作。此外,你知道你的Postgres數據庫究竟存儲在哪里嗎?你能隨便指一個地方,說,“那就是我的數據庫”嗎?(西安。尚。學。堂

  SQLite容易管理——因為它是一個單一文件(或在某些時候是一個文件+事務日志)。文件格式在很多主要的版本上都非常穩定,所以假設我有一個從3.0.0版本(在2004年)開始的SQLite數據庫文件,那么我也可以使用最新的SQLite 3.10.0讀取它。如果我想將數據庫文件放到一個U盤中,那么我只要復制文件,或者更好的做法是將文件保存在dropbox文件夾中。如果我想每天晚上備份,那么我只要同步數據庫文件到S3。如果我想分享一些和同事一起做的數據分析,那么完全可以發送一份數據庫文件的副本給他們,然后他們就可以使用了。數據庫以一種單個文件的形式存在,且具備穩定的格式,是SQLite的特色。

 

  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還可以用於定義虛擬表和虛擬文件系統!

  舉個實際的例子,假設你在一個表中有一個列用於存儲URL,你想要確定哪些是最常見的主機名——假設你使用的是不同的數據庫,那么你將不得不寫一個復雜的正則表達式,結合了字符串操作函數,或要提取數據到app並在代碼中進行計算。使用SQLite,你就可以用Python語言定義一個hostname函數,然后用它來創建一個簡單的COUNT查詢:

  

from urlparse import urlparse

  def hostname(url):

  return urlparse(url).netloc

  conn = sqlite3.connect('my-database.db')

  conn.create_function('hostname', 1, hostname) # name, num_params, func

 

  4.快如閃電

  SQLite非常快。由於它運行在同一台機器上,所以在執行查詢或讀取結果時是沒有網絡負擔的。又因為它運行在相同的地址空間,所以沒有線路協議、序列化,也不需要通過unix套接字進行通信。當資源稀缺和效率是至關重要的時候,SQLite還可以運行在移動設備上。 SQLite還支持大量的編譯標識,允許你刪除你不打算使用的功能。

  SQLite的速度彌補了它最大的不足之處之一,那就是數據庫文件鎖定寫入。令人難以置信的快速寫數據,只當有大量的並發寫提供服務時,數據庫鎖定才會成為一個問題。

 

  5、WAL模式

  SQLite的3.7.0版本中補充了一種利用預寫日志的新日志記錄方法。雖然其本身真不算是令人振奮的消息,但這對web應用程序開發人員(或任何處理並發的人員)意味着讀的服務不會再阻塞寫的服務,反之亦然。換言之就是,讀和寫可以同時地發生。如果沒有WAL模式,那么要想寫入數據庫,寫的服務則需要獨占訪問數據庫,並且不能發生讀的服務,直到寫的服務結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM