我们应该使用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模式,那么要想写入数据库,写的服务则需要独占访问数据库,并且不能发生读的服务,直到写的服务结束。

posted @ 2017-05-10 19:16  风也不知道往哪吹  阅读(3100)  评论(0编辑  收藏  举报