Appropriate Uses For SQLite
Appropriate Uses For SQLite
由于SQLite试图解决不同的问题,因此SQLite不能与客户端/服务器SQL数据库引擎(如MySQL,Oracle,PostgreSQL或SQL Server)直接比较。
客户端/服务器SQL数据库引擎力求实现企业数据的共享存储库。他们强调可扩展性,并发性,集中和控制。SQLite致力于为单个应用程序和设备提供本地数据存储。SQLite强调经济性,效率,可靠性,独立性和简单性。
SQLite不与客户端/服务器数据库竞争。SQLite与fopen()竞争。
SQLite工作得很好的情况
嵌入式设备和物联网
由于SQLite数据库不需要管理,因此在需要专业人员支持的情况下才能运行的设备中运行良好。SQLite非常适合用在手机,机顶盒,电视机,游戏机,相机,手表,厨房用具,恒温器,汽车,机床,飞机,遥感器,无人机,医疗设备和机器人中:“万物互联”。客户端/服务器数据库引擎被设计为位于网络核心的一个可爱的数据中心内。SQLite也可以在那里工作,但SQLite也在网络边缘蓬勃发展,为自己提供支持,同时为应用程序提供快速和可靠的数据服务,否则这些应用程序会存在不可靠的连接。
应用文件格式
SQLite通常用作桌面应用程序的磁盘文件格式,如版本控制系统,财务分析工具,媒体编目和编辑套件,CAD软件包,记录保存程序等等。传统的File / Open操作调用sqlite3_open()以附加到数据库文件。更新应用程序内容时会自动更新,因此文件/保存菜单选项变得多余。File / Save_As菜单选项可以使用备份API来实现。
这种方法有许多好处,包括改进的应用程序性能,降低的成本和复杂性以及提高的可靠性。有关详情,请参阅此处和此处的技术说明。
网站
SQLite作为大多数中低流量网站
(也就是说大多数网站
)的数据库引擎工作良好。SQLite可以处理的网络流量取决于网站
使用其数据库的程度。一般来说,任何每天点击次数少于100K的站点应该可以很好地使用SQLite。100K点击/日数是一个保守的估计,而不是一个硬性上限。SQLite已被证明可以处理10倍的流量。SQLite网站
(https://www.sqlite.org/)当然使用SQLite本身,并且在撰写本文时(2015年),它每天处理大约400K到500K的HTTP请求,其中约15-20%是动态页面接触数据库。动态内容每个网页使用大约200个SQL语句。这种设置运行在一台共享23台物理服务器的虚拟机上,但大部分时间仍然保持平均负载低于0.1。
数据分析
理解SQL的人可以使用sqlite3命令行shell(或各种第三方SQLite访问程序)来分析大型数据集。可以从CSV文件导入原始数据,然后可以对数据进行切片和切块以生成大量摘要报告。使用用Tcl或Python编写的简单脚本(这两种脚本都内置SQLite)或R或其他语言使用易于使用的适配器可以完成更复杂的分析。可能的用途包括网站日志分析,体育统计分析,编程指标汇编和实验结果分析。许多生物信息学研究人员以这种方式使用SQLite。
当然,使用企业客户端/服务器数据库也可以做同样的事情。SQLite的优点是安装和使用起来更容易,并且生成的数据库是可以写入USB记忆棒或通过电子邮件发送给同事的单个文件。
缓存企业数据
许多应用程序使用SQLite作为企业RDBMS相关内容的缓存。这可以减少延迟,因为现在大多数查询都是针对本地缓存进行的,并避免了网络往返。它还减少了网络和中央数据库服务器上的负载。在很多情况下,这意味着客户端应用程序可以在网络中断期间继续运行。
服务器端数据库
系统设计人员使用SQLite作为数据中心中运行的服务器应用程序上的数据存储,或者换句话说,使用SQLite作为特定于应用程序的数据库服务器的基础存储引擎报告成功。
使用这种模式,整个系统仍然是客户端/服务器:客户端向服务器发送请求并通过网络取回回应。但不是发送通用SQL并获取原始表内容,客户端请求和服务器响应是高级别的和特定于应用程序的。服务器将请求转换为多个SQL查询,收集结果,执行后处理,过滤和分析,然后构造仅包含基本信息的高级回复。
开发人员报告说,在这种情况下,SQLite通常比客户端/服务器SQL数据库引擎更快。数据库请求由服务器序列化,因此并发不是问题。“数据库分片”也改进了并发性:对不同的子域使用单独的数据库文件。例如,服务器可能为每个用户都有一个单独的SQLite数据库,以便服务器可以处理数百或数千个同时连接,但每个SQLite数据库仅由一个连接使用。
文件档案
的SQLite的归档项目显示的SQLite如何被用作ZIP压缩文件或压缩包的替代品。存储在SQLite中的文件存档只比相应的ZIP存档稍大,在某些情况下实际上更小。SQLite存档功能增量式和原子式更新以及存储更丰富元数据的功能。SQLite存档作为广播给许多客户端的软件或内容更新的分发格式很有用。例如,这种想法的变化被用于将电视节目指南传输到机顶盒并向车载导航系统发送无线更新。
替换
ad hoc
磁盘文件
许多程序使用fopen(),fread()和fwrite()以本地格式创建和管理数据文件。SQLite特别适合替代这些ad hoc
数据文件。
内部数据库或临时数据库
对于有很多数据必须以多种方式进行筛选和排序的程序,将数据加载到内存中的SQLite数据库并使用带连接和ORDER BY子句的查询来提取数据通常更容易和更快速需要表单和顺序中的数据,而不是尝试手动编写相同的操作。以这种方式在内部使用SQL数据库还可以提高程序的灵活性,因为可以添加新列和索引而无需重新编码每个查询。
在演示或测试期间为企业数据库提供支持
客户端应用程序通常使用允许连接到各种SQL数据库引擎的通用数据库接口。将SQLite包含在支持的数据库中并将SQLite引擎静态链接到客户端是非常有意义的。这样客户端程序就可以与SQLite数据文件独立使用以进行测试或演示。
教育和培训
因为安装和使用起来很简单(安装非常简单:只需将sqlite3
或sqlite3.exe
可执行文件复制到目标机器并运行它),SQLite就是一个很好的数据库引擎,可用于教授SQL。学生可以轻松创建任意数量的数据库,并可以通过电子邮件将数据库发送给教师进行评论或评分。对于那些有兴趣研究RDBMS如何实现的高级学生来说,模块化且经过充分评论和记录的SQLite代码可以作为一个很好的基础。
实验性的SQL语言扩展
SQLite的简单模块化设计使其成为原型开发新的实验性数据库语言特性或想法的良好平台。
客户端/服务器RDBMS可能工作得更好的情况
客户端/服务器应用
如果有很多客户端程序通过网络将SQL发送到同一个数据库,则使用客户端/服务器数据库引擎而不是SQLite。SQLite将通过网络文件系统工作,但由于与大多数网络文件系统相关的延迟,性能不会太好。另外,文件锁定逻辑在许多网络文件系统实现中(在Unix和Windows上)都有问题。如果文件锁定无法正常工作,两个或多个客户端可能会尝试同时修改同一数据库的同一部分,从而导致损坏。因为这个问题是由底层文件系统实现中的错误引起的,所以SQLite没有办法阻止它。
大量的网站
SQLite通常会正常工作,因为网站的数据库后端。但是如果网站的写入密集型或繁忙以至于需要多台服务器,那么可以考虑使用企业级客户端/服务器数据库引擎而不是SQLite。
非常大的数据集
SQLite数据库的大小限制为140 TB(247字节,128 tibibytes)。即使它可以处理更大的数据库,SQLite也会将整个数据库存储在单个磁盘文件中,并且许多文件系统将文件的最大大小限制为小于此值。因此,如果您正在考虑这种数量级别的数据库,则最好考虑使用客户端/服务器数据库引擎,将其内容分布到多个磁盘文件中,也可能跨多个卷。
高并发性
SQLite支持无限数量的同步阅读器,但它只允许一个作者在任何瞬间。对于很多情况,这不是问题。作家排队。每个应用程序都快速完成其数据库工作并继续前进,并且不会有超过几十毫秒的锁定。但是有一些应用程序需要更多的并发性,而这些应用程序可能需要寻求不同的解决方案。
核对清单选择正确的数据库引擎
数据是否通过网络与应用程序分离?→选择客户端/服务器
关系数据库引擎充当带宽减少数据过滤器。因此,最好将数据库引擎和数据保持在同一物理设备上,以便高带宽引擎到磁盘链路不必遍历网络,而只需要较低带宽的应用程序引擎链路。但SQLite内置于应用程序中。因此,如果数据位于应用程序的独立设备上,则需要在网络中使用更高带宽的引擎至磁盘链接。这有效,但它并不理想。因此,当数据位于应用程序的单独设备上时,选择客户端/服务器数据库引擎通常会更好。Nota Bene:
在这个规则中,“应用程序”是指发布SQL语句的代码。如果“应用程序”是应用程序服务器,并且内容驻留在与应用程序服务器相同的物理机器上,那么即使最终用户离开另一个网络,SQLite也仍然适用。
许多并发编译人员?→选择客户端/服务器
如果许多线程和/或进程需要在同一时刻写入数据库(并且它们不能排队等待),那么最好选择一个支持该功能的数据库引擎,这总是意味着客户端/服务器数据库引擎。
SQLite每个数据库文件一次只支持一个编写器。但在大多数情况下,写入事务只需要几毫秒,因此多个写入者可以轮流进行。SQLite将处理许多人怀疑的更多写入并发性。尽管如此,客户端/服务器数据库系统,因为他们有一个长期运行的服务器进程来协调访问,通常可以处理比SQLite更多的写入并发性。
大数据?→选择客户端/服务器
如果您的数据将增长到您不舒服或无法放入单个磁盘文件的大小,则应选择SQLite以外的解决方案。假设你可以找到一个支持140-terabyte文件的磁盘驱动器和文件系统,SQLite支持最大140TB的数据库。即使如此,当内容大小看起来可能会爬到TB级时,最好考虑集中式客户机/服务器数据库。
否则→选择SQLite!
对于低写入器并发性和小于1TB内容的设备本地存储,SQLite几乎总是一个更好的解决方案。SQLite快速可靠,无需配置或维护。它让事情变得简单。SQLite“正常工作”。
SQLite在公共领域。