当前位置:文档之家› 浅谈嵌入式SQLite数据库实现与应用

浅谈嵌入式SQLite数据库实现与应用

浅谈嵌入式SQLite数据库实现与应用
浅谈嵌入式SQLite数据库实现与应用

1、前言

有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。惊喜的同时,不得不聊上几句了。

首先,来看看都有哪些人在使用SQLite,主页上列举一长串NB的用户,其中不乏像Adobe,Apple,F irefox,甚至连google,Microsoft,SUN这样的用户。

Firefox:这是我的机器上V3.5.7安装目录下的文件:

可以发现用的SQLite 3.6.16.1。

据说,Google在它的Desktop for Mac,Google Gears,以及Android,甚至Chrome中都用到S QLite,而且,Google的工程师对SQLite的全文检索功能作了很大的贡献(contribution)。还有Apple,Micorsoft,SUN等等,这里就不列举了。详细见https://www.doczj.com/doc/744848938.html,/famous.html。有这些公司的参与,对SQLite的发展应该有很大的帮助,尤其是像Google这样的用户。

2、实现与应用

下面从实现及应用的角度来谈谈SQLite,先看看SQLite的特点(功能)吧。

特点

简单(simple):SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS:一个头文件,一个动态库文件,你就拥有了关系数据库的所有功能了。简单,是SQLite最明显的哲学。它提供的API少而简单。只需要一个DLL文件,你的程序马上就拥有了一个功能强大的数据库引擎,这是一件很美妙的事。

小巧(small):我用VS 2005在Windows下编译的3.6.11,Release版为368K,用时不到20秒——而编译MySQL时,要花上几分钟。而当我插入10000条int数据时,内存开销660K,磁盘开销92 K。

事务(transaction):事务是现代商业数据处理系统最基本的要求,而Access,不论是在可执行文件大小(看了一下Access2003的可执行文件大小为6.32M,两者不是一个量级),还是事务特性,都是不能和SQLite 相比的。

并发性(Concurrency):由于SQLite通过OS的文件锁来实现库级锁,粒度很大,但是,它通过一些复杂特殊的处理(具体可以参见分析系列),尽量的提升了读写的并发度。如果你还有担心,你可以看看这篇文章:https://www.doczj.com/doc/744848938.html,/database/sqlite_cms.html。

SQL92:SQLite支持绝大部分的标准SQL语句,你只需要几百K的空间,就可以换来需要上百兆的通用DBMS几乎所有操作了。

方便(Convenience):如果你的程序要使用SQLite,只需要将拷贝你的程序目录即可。

开源(Opensource):这是它最强大的地方。开源,意味着你可以品读它的源码,你可以随时修改它,加入你自己的特性,而这一切完全免费的。开源,是一种精神。

实现部分

好了,现在从实现的角度来谈谈个人体会,这也是我比较关注的。

SQLite是一款优秀的嵌入式数据库管理系统,这里有两层含义:一是它经常作为动态库嵌入到应用程序;

另外一方面它通常用于嵌入式设备或其它要求较低的桌面应用。如果把它作为内存数据库,个人觉得不是很适合。毕竟,它的写并发性不是很好,此时,TimesTen也许会更好,Berkey DB也许是一个不错的选择。SQLite这样的嵌入式数据库与主存数据库的应用场景、实现以及对资源的需求都是不一样的。

(1)事务处理

事务的核心问题有两个:并发控制和恢复。解决了并发控制和恢复问题的系统,就能允许它的用户假设程序是原子的(atomically)执行的——好像没有其它的程序同时执行;而且是可靠的(reliably)——不会产生失败。原子性和可靠性的抽象,则称为事务(transaction)。其实,事务并不是DBMS的专利,任何分布式系统,都面对并发和恢复问题,而解决的方法就是事务,只不过,我们更常听到DBMS中的事务。

并发控制保证事务的原子执行,它使得交错执行的事务看起来是一个接一个的顺序执行的,完全没有交错执行。如果交错执行的结果与顺序执行的结果一致,则称为串行化(serializable)。

恢复使得数据库仅仅包含那些正常完成的事务的结果。如果事务在执行的过程中发生错误,不能继续进行,恢复算法必须清除部分完成事务产生的影响。

?并发控制

SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。表级都不能并行,更别说元组级了——这就是库级锁。但是,SQLite尽量延迟申请X锁,直到数据块真正写盘时才申请X锁,这是非常巧妙而有效的。

?恢复

SQLite的恢复技术是影子分页技术(shadow paging)技术的典型代表。

DBMS的常用恢复技术有影子分页技术与基于日志的技术,前者在早其数据库管理系统中用到,比如Sys tem R,现代DBMS中已经很难见到它的身影了。

影子分页技术与基于日志技术相比,优点是实现简单,消除了写日志记录的开销,恢复的速度也快(不需要redo和undo)。影子分页的缺点就是事务提交时要输出多个块,这使得提交的开销很大,而且以块为单位,很难应用到允许多个事务并发执行的情况——这是它致命的缺点。

(2)查询处理

SQLite的查询处理本质上就是一个SQL编译器和一个虚拟机。而实现这些功能只用了十多个文件,整个实现实现简单而有效,但是也存在一些问题。首先,SQLite字典数据很简单,实际上它的字典就一个表s qlite_m ater,所有的信息都是通过对sqlite_master中SQL语句进行解析获取的,而解析一个SQL语句,都需要进行词法分析、语法分析、甚至虚拟机代码的生成。而这一过程是很需要时间的,而且,查询计划也没有重用。其次,查询优化还比较简单,特别是连接操作,只通过循环来做(MySQL也一样)。但是,仅仅数万代码,我们不能对它要求太苛求。

(3)存储模型

SQLite的文件物理上被划分成相同大小的块;逻辑上划分成一些B-Tree——每个表对应一个B-Tree。而没有像Oracle,或者InnoDB对数据块进行复杂的逻辑组织,这种按需分配数据块的做法必然影响磁盘的读写性能。不过,归根到底,还是源于它的应用场景。

(4)缓冲区管理

Buffer的管理对于DBMS,无疑是非常重要的,SQLite在其它方面做得比较简单,但是在缓冲区管理这一块,它还是做足了功夫。SQLite采用DBMS常用的LRU算法。更值得一提的是,在较新的版本中,S QLite采用和虚拟文件系统的类似的方式,实现了让默认缓冲区管理子系统可以很容易的切换成其它的缓冲区管理算法,这是非常灵活的。

(5)I/O

SQLite采用简单的阻塞I/O,较新的版本将异步I/O作为可选的扩展,但是,由于SQLite没有日志,所以,事务中ACID中的D,就无法保证,所以,如果你的数据很关键,请不要用SQLite的异步I/O。另一方面,实际上,很多嵌入式操作系统,比如Windows CE并不支持异步I/O(不过,这可以通过多线程加以解决)。

但是,这些“缺点”并不是SQLite的缺点,相对于通过DBMS,恰恰是它的优点,这样的实现简单,而且对资源的需求较低。对嵌入式设备、或者那些要求较低的应用,已经足够,足够就好。

应用场景

嵌入式设备:这应该是SQLite应用的主要场景,很多公司都在他们的嵌入式应用程序中使用SQLite,其中不乏google的Android。

桌面应用:如果你已经厌恶了fopen,fread,fwrite这些函数,SQLite是你不错的选择,它接口简单,而且支持事务。前些天无意中下了一个cookie清除软件——CookieCrumbler,打开一看,发现里面竟然有一个sqlite3.dll,着实让我震惊了一把。

Websites:如果你的站点的访问量、数据量小的个人站点,SQLite可以代替开销较大的MySQL和繁杂的Access。

后记

SQLite正在不断发展,开源的力量是巨大的,相信它的应用会越来越广泛。Wish~

推荐:嵌入式数据库sqlite

推荐:嵌入式数据库sqlite 很久之前有听闻过sqlite,大体上也了解sqlite的优势与应用场合。这些天看到不少朋友在谈论sqlite,连Google发布的离线版Gmail也都支持sqlite(当然是在HTML5的条件下)。现在,我就介绍下sqlite吧: 首页说明一下,这个推荐嵌入式数据库叫sqlite,不叫sqllite,有很多网站都误报了。 sqlite第一个ALPHA版本是生于2000年5月。经过9个年头的发展,现在最新版本是3.6.11了。 sqlite是一个比ACCESS更小的嵌入式数据库,通常用在小型嵌入式设备上。 官方网站:https://www.doczj.com/doc/744848938.html,/SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化: 易于管理 易于使用 易于嵌入其他大型程序 易于维护和配置 许多人喜欢SQLite因为它的小巧和快速. 但是这些特性只

是它的部分优点, 使用者还会发现SQLite是非常稳定的. 出色的稳定性源于它的简单, 越简单就越不容易出错. 除了上述的简单、小巧和稳定性外, 最重要的在于SQLite力争做到简单化. 简单化在一个数据库引擎中可以说是一个优点, 但也可能是个缺点, 主要决定于你想要做什么. 为了达到简单化, SQLite省略了一些人们认为比较有用的特性, 例如高并发性、严格的存取控制、丰富的内置功能、存储过程、复杂的SQL语言特性、XML以及Java的扩展, 超大的万亿级别的数据测量等等. 如果你需要使用上述的这些特性并且不介意它们的复杂性, 那么SQLite也许就不适合你了. SQLite没有打算作为一个企业级的数据库引擎, 也并不打算和Oracle或者PostgreSQL竞争. 仅凭经验来说SQLite适用于以下场合: 当你更看中简单的管理、使用和维护数据库, 而不是那些企业级数据库提供的不计其数的复杂功能的时候,使用SQLite是一个比较明智的选择. 事实也证明, 人们在许多情况下已经清楚的认识到简单就是最好的选择. SQLite最佳试用场合 网站作为数据库引擎SQLite适用于中小规模流量的网站(也就是说, 99.9%的网站). SQLite可以处理多少网站流量在

OpenBASE嵌入式数据库技术白皮书

OpenBASE Lite V2.1 技术白皮书 2011年10月

引言 随着计算机及相关技术的不断发展,嵌入式产品由于其智能化、小型化、便携式等特点,已普遍应用于我们的生活,比如智能手机、掌上电脑、个人数字助理(PDA)等。它们大多基于Symbian、Windows Mobile、Android、Embeded Linux 等嵌入式操作系统平台,具有体积小、专为移动使用而设计,相对较小的内存和计算能力,偶尔连接到计算机网络等特点。尽管仍有诸多限制,许多商业应用,如移动办公,销售自动化,移动保健及网上购物等,已经与移动设备进行了很好的整合。 随着嵌入式系统的发展,用户需要处理大量而复杂的数据。自定义、使用本地文件管理数据的模式已不能满足应用要求。而嵌入式数据库提供了可靠、高效的数据管理模式。OpenBASE Lite正是这样一款专门为运行在嵌入式设备上的应用而设计的安全可靠、无需管理的嵌入式关系型数据库管理系统,它提供了丰富的SQL语法,灵活标准的接口和组件,使开发人员在开发嵌入式软件时,面对熟悉的开发环境。 产品介绍 OpenBASE Lite是一个典型的轻量级数据库,定制的数据库引擎所占用的系统资源可在250KB到600KB之间伸缩,可支持多种桌面操作系统、主流嵌入式系统平台及不同的处理器。作为一款功能全面的关系型数据库系统,OpenBASE Lite通过支持标准的SQL语法、完整的事务特性、灵活的备份/恢复机制等功能,能够在嵌入式环境下沿用关系数据库的经验继续来进行应用的开发。OpenBASE Lite提供了开放的标准化开发接口JDBC、ODBC、https://www.doczj.com/doc/744848938.html,,便于开发人员访问嵌入式设备上的数据。OpenBASE Lite支持零管理,自调优机制,并提供了图形化管理工具,使得管理变得十分方便。 OpenBASE Lite提供了内存数据库运行模式,提供高速的数据访问与更新能力。

sqlite3数据库使用实例

SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table students( ...> id integer primary key, ...> name text not null unique, ...> sex int default 1, ...> bak text); sqlite> .tables students sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE .bail ON|OFF Stop after hitting an error. Default OFF .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in an SQL text format If TABLE specified, only dump tables matching LIKE pattern TABLE. .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off. With no args, it turns EXPLAIN on. .header(s) ON|OFF Turn display of headers on or off .help Show this message .import FILE TABLE Import data from FILE into TABLE .indices ?TABLE? Show names of all indices If TABLE specified, only show indices for tables matching LIKE pattern TABLE. .load FILE ?ENTRY? Load an extension library .log FILE|off Turn logging on or off. FILE can be stderr/stdout .mode MODE ?TABLE? Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns. (See .width) html HTML

code insert SQL insert statements for TABLE line One value per line list Values delimited by .separator string tabs Tab-separated values tcl TCL list elements .nullvalue STRING Print STRING in place of NULL values .output FILENAME Send output to FILENAME .output stdout Send output to the screen .prompt MAIN CONTINUE Replace the standard prompts .quit Exit this program .read FILENAME Execute SQL in FILENAME

浅谈嵌入式SQLITE数据库实现与应用

开源(Opensource):这是它最强大的地方。开源,意味着你可以品读它的源码,你可以随时修改它,加入你自己的特性,而这一切完全免费的。开源,是一种精神。 实现部分 好了,现在从实现的角度来谈谈个人体会,这也是我比较关注的。 SQLite是一款优秀的嵌入式数据库管理系统,这里有两层含义:一是它经常作为动态库嵌入到应用程序; 另外一方面它通常用于嵌入式设备或其它要求较低的桌面应用。如果把它作为内存数据库,个人觉得不是很适合。毕竟,它的写并发性不是很好,此时,TimesTen也许会更好,Berkey DB也许是一个不错的选择。SQLite这样的嵌入式数据库与主存数据库的应用场景、实现以及对资源的需求都是不一样的。 (1)事务处理 事务的核心问题有两个:并发控制和恢复。解决了并发控制和恢复问题的系统,就能允许它的用户假设程序是原子的(atomically)执行的——好像没有其它的程序同时执行;而且是可靠的(reliably)——不会产生失败。原子性和可靠性的抽象,则称为事务(transaction)。其实,事务并不是DBMS的专利,任何分布式系统,都面对并发和恢复问题,而解决的方法就是事务,只不过,我们更常听到DBMS中的事务。 并发控制保证事务的原子执行,它使得交错执行的事务看起来是一个接一个的顺序执行的,完全没有交错执行。如果交错执行的结果与顺序执行的结果一致,则称为串行化(serializable)。 恢复使得数据库仅仅包含那些正常完成的事务的结果。如果事务在执行的过程中发生错误,不能继续进行,恢复算法必须清除部分完成事务产生的影响。 ?并发控制 SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。表级都不能并行,更别说元组级了——这就是库级锁。但是,SQLite尽量延迟申请X锁,直到数据块真正写盘时才申请X锁,这是非常巧妙而有效的。 ?恢复 SQLite的恢复技术是影子分页技术(shadow paging)技术的典型代表。 DBMS的常用恢复技术有影子分页技术与基于日志的技术,前者在早其数据库管理系统中用到,比如Sys tem R,现代DBMS中已经很难见到它的身影了。 影子分页技术与基于日志技术相比,优点是实现简单,消除了写日志记录的开销,恢复的速度也快(不需要redo和undo)。影子分页的缺点就是事务提交时要输出多个块,这使得提交的开销很大,而且以块为单位,很难应用到允许多个事务并发执行的情况——这是它致命的缺点。 (2)查询处理 SQLite的查询处理本质上就是一个SQL编译器和一个虚拟机。而实现这些功能只用了十多个文件,整个实现实现简单而有效,但是也存在一些问题。首先,SQLite字典数据很简单,实际上它的字典就一个表s qlite_mater,所有的信息都是通过对sqlite_master中SQL语句进行解析获取的,而解析一个SQL语句,都需要进行词法分析、语法分析、甚至虚拟机代码的生成。而这一过程是很需要时间的,而且,查询计划也没有重用。其次,查询优化还比较简单,特别是连接操作,只通过循环来做(MySQL也一样)。但是,仅仅数万代码,我们不能对它要求太苛求。 (3)存储模型

Qt4访问sqlite数据库

目录 Qt4访问sqlite数据库 (2) RedHat 9 Linux下在QT3.1中连接SQLite3全过程详细记录 (6) 基于ARM-Linux的SQLite嵌入式数据库技术 (17) 关于在qt中如何连接sqlite3数据库的问题 (23) SQLite 完整中文FAQ (32) C/C++中调用SQLITE3的基本步骤 (40) SQLite嵌入式数据库系统的研究与实现 (50)

Qt4访问sqlite数据库 https://www.doczj.com/doc/744848938.html,/index.php/2008/09/qt-sqlite/ sqlite简介 sqlite 是一款轻量级的、基于文件的嵌入式数据库,2000年就已经诞生,经过7年多的发展,直到今天已经成为最流行的嵌入式数据库,包括google在内的公司在其桌面软件中亦使用sqlite 存储用户数据。由此可以看出,已经没有任何理由去怀疑sqlite的稳定性了。 sqlite的优势 1. 免配置,和access一样,只要把数据库文件通过ftp上传到服务器上就可以使用,不需要服务器的额外支持 2. 备份方便,因为只是一个文件,只要复制一份该文件,就能备份整个数据库 3. 虽然是轻量级数据库,但他支持最大2tb 的单个库文件。 4. 快,无与伦比的快。经过实际测试,在几百万记录的情况下,sqlite的插入和查询速度和mysql 不分上下,快于sql server,10倍于access (但这并不意味着它可以替代sql server ) 用QT操作sqlite 由于sqlite属于轻量级的数据库,不需要配置,不需要安装,也不需要管理员,所以也就没必要像操作mysql等数据库一样的设置主机,用户和密码了。样例如下: 1 2 3 4 5 6 7 8 9 10 11 12 #include #include #include #include #include #include

嵌入式数据库的现状和发展趋势_史恒亮

嵌入式数据库的现状和发展趋势 ①史恒亮1,2,3 白光一1,3 (1. 南京理工大学计算机学院江苏南京210094; 2.河南科 技大学电信学院河南洛阳471003; 3.方舟信息技术(苏州)有限公司江苏苏州215021) 2010 年第19 卷第 2 期计算机系统应用 Special Issue 专论综述207 CPU 的并行处理结构,一个CPU 负责正常的事务处 理,另一个专门负责有关恢复处理,如记录日志、做 检验点以及故障后进行数据库恢复,该方法是通过改 善硬件的处理性能来换取系统整体性能的改善,但该 种方法在资源条件苛刻的嵌入式系统中显然是不适用 的。有人提出了基于影子的恢复技术,该技术的优点 是消除了日志开销,恢复速度快,缺点是在事务生命 周期内数据库需维持其更新数据页的两个版本---当 前页和影子页 [6-8] ,同时需维护大量的页表指针。该方 法是通过适当的增加存储数据量来提高系统性能。相 比较而言,后者在嵌入式系统,以及嵌入式数据库恢 复中应用的更多。为了保证嵌入式数据库中数据的正 确性,文献[9]引入时间有效性,当数据库实时数据真 实反映对应实体对象物理环境时,这个数据在时间域 内是新鲜的。 3.2 事务处理技术和移动查询优化 嵌入式数据库系统中的事务处理在前端可以简单 化,但在整个应用系统中要结合计算环境的特征进行 事务处理控制。有效平衡用户事务和更新负载是提供 满意服务的关键,文献[10]提出了Qos(Quality of Server)技术,还提出了一种QMF 方法去保证事务满 足截止期的比率。文献[11]提出了用数据版本概念去 解决事务间访问数据的冲突和加强并发控制。为了保 证活动事务的顺利完成,必须设计和实现新的事务管 理策略和算法。 移动查询优化是指在传统分布式数据库查询优化 技术的基础上,利用多种方法消除带宽多样性、断接

嵌入式系统技术报告(题目 SQLITE数据库的概述和使用)

合肥学院 嵌入式系统设计课程 技术报告 (2014-2015第2学期) 报告题目:SQLite数据库概述和使用专业:自动化 班级:级自动化卓越班 姓名: 指导老师:干开峰

摘要 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变的非常庞大,并占用相当多的系统资源。嵌入式数据库直接在应用程序进程中运行,提供了零配置运行模式,并且资源占用非常少。作为一个开源的嵌入式数据库产品,SQLite具有系统开销小,检索效率高的特性,嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式,而后者是引擎响应式。嵌入式数据库的一个很重要的特点是体积非常小,同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。SQLite是D·理查德·希普开发出来的用一个小型C库实现的一种强有力的嵌入式关系数据库管理体制。SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库。 关键词:SQLite;嵌入式;数据库

目录 1SQLite简介 (1) 2SQLite工作原理 (1) 3SQLite的功能特性 (2) 4SQLite的结构 (2) 5SQLite的使用 (4) 5.1SQLite里面的一些基本的操作: (4) 5.2SQLite的一些类的使用及说明: (5) 5.3SQLite嵌入式数据库使用注意: (10) 6总结 (11)

sqlite命令

Sqlite命令操作 建立数据库档案 用sqlite3建立数据库的方法很简单,只要在shell下键入(以下$符号为shell 提示号,请勿键入): $ sqlite3 foo.db 如果目录下没有foo.db,sqlite3就会建立这个数据库。sqlite3并没有强制数据库档名要怎么取,如果你喜欢,也可以取个foo.icannameitwhateverilike 的档名。 在sqlite3提示列下操作 进入了sqlite3之后,会看到以下文字: SQLite version 3.1.3 Enter ".help" for instructions sqlite> 这时如果使用.help可以取得求助,.quit则是离开(请注意:不是quit) SQL的指令格式 所以的SQL指令都是以分号(;)结尾的。如果遇到两个减号(--)则代表注解,sqlite3会略过去。 建立资料表 假设我们要建一个名叫film的资料表,只要键入以下指令就可以了:

create table film(title, length, year, starring); 这样我们就建立了一个名叫film的资料表,里面有name、length、year、starring 四个字段。 这个create table指令的语法为: create table table_name(field1, field2, field3, ...); table_name是资料表的名称,fieldx则是字段的名字。sqlite3与许多SQL数据库软件不同的是,它不在乎字段属于哪一种资料型态:sqlite3的字段可以储存任何东西:文字、数字、大量文字(blub),它会在适时自动转换。 建立索引 如果资料表有相当多的资料,我们便会建立索引来加快速度。好比说: create index film_title_index on film(title); 意思是针对film资料表的name字段,建立一个名叫film_name_index的索引。这个指令的语法为 create index index_name on table_name(field_to_be_indexed); 一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。 加入一笔资料 接下来我们要加入资料了,加入的方法为使用insert into指令,语法为:insert into table_name values(data1, data2, data3, ...); 例如我们可以加入

常用的嵌入式数据库的比较

常用的嵌入式数据库的比较 2.1 Berkeley DB 技术特点: 1. Berkeley DB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。(不使用SQL语言) 2. Berkeley DB为许多编程语言提供了实用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。 3. Berkeley DB轻便灵活(Portable),可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。 4. Berkeley DB是可伸缩(Scalable)的,这一点表现在很多方面。Database library 本身是很精简的(少于300KB的文本空间),但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库。Berkeley DB能以足够小的空间占用量运行于有严格约束的嵌入式系统。 Berkeley DB在嵌入式应用中比关系数据库和面向对象数据库要好,有以下两点原因:(1)因为数据库程序库同应用程序在相同的地址空间中运行,所以数据库操作不需要进程间的通讯。在一台机器的不同进程间或在网络中不同机器间进行进程通讯所花费的开销,要远远大于函数调用的开销; (2)因为Berkeley DB对所有操作都使用一组API接口,因此不需要对某种查询语言进行解析,也不用生成执行计划,大大提高了运行效。 2.2 SQLite 轻量级别数据库SQLite的主要特点: 1. 支持事件,不需要配置,不需要安装,也不需要管理员; 2. 支持大部分SQL92; 3. 一个完整的数据库保存在磁盘上面一个文件,同一个数据库文件可以在不同机器上面使用,最大支持数据库到2T,字符和BLOB的支持仅限制于可用内存; 4. 整个系统少于3万行代码,少于250KB的内存占用(gcc),大部分应用比目前常见的客户端/服务端的数据库快,没有其它依赖 5. 源代码开放,代码95%有较好的注释,简单易用的API。官方带有TCL的编译版本。 2.1 Berkeley DB 技术特点: 1. Berkeley DB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。(不使用SQL语言) 2. Berkeley DB为许多编程语言提供了实用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。

嵌入式数据库 SQLite 移植实验

实验三嵌入式数据库SQLite 移植实验 一实验目的 完成这个实验后,您将具有以下能力: 了解嵌入式数据库SQLite 的移植方法。 学习如何使用SQLite 的方法。 二基础知识 进行本实验前,您应具有: C 语言基础 Linux 环境下vi 编译器的使用 Makefile的编写和使用 Linux 下的程序编译与交叉编译过程 三实验环境准备 为了完成本实验,以下硬件条件是必需的: UP-NETARM2410-S 嵌入式实验平台 PC机Pentium500 以上,硬盘40G 以上,内存128M 以上 为了完成本实验,以下软件条件是必需的: PC机操作系统RedHat Linux 9.0 ARM-LINUX 开发环境 sqlite-2.8.17-2410.tar.bz2 压缩包 sqlite-3.3.8.tar.gz 压缩包 四情景描述 下载sqlite-2.8.17-2410.tar.bz2 压缩包并且解压,之后执行configure 生成Makefile文件,通过更改Makefile 文件实现sqlite 程序在x86 系统和arm 平台上的运行。之后下载sqlite-2.8.17-2410.tar.bz2 压缩包,重复上述操作,体验不同版本sqlite之间的区别。 五实验基本原理 1,SQLite介绍 SQLite是一个SQL数据库引擎的小型C函数库,它具有完备性,可嵌入式以及零配置 等特点,所以使用起来非常方便。而且该API代码开源,用途广泛,是非常容易修改和裁减 的。因此,该系统是作为嵌入式数据库的最好选择之一。最后写一个测试程序调用生成的嵌入式数据库。 Generated by Foxit PDF Creator ? Foxit Software https://www.doczj.com/doc/744848938.html, For evaluation only. 2 在https://www.doczj.com/doc/744848938.html,的网站上介绍SQLite的特点如下: ACID事务 零配置——不需要安装和管理配置 储存在单一磁盘文件中的一个完整的数据库 数据库文件可以在不同字节顺序的机器之间自由共享

浅谈嵌入式SQLite数据库实现与应用

1、前言 有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。惊喜的同时,不得不聊上几句了。 首先,来看看都有哪些人在使用SQLite,主页上列举一长串NB的用户,其中不乏像Adobe,Apple,F irefox,甚至连google,Microsoft,SUN这样的用户。 Firefox:这是我的机器上V3.5.7安装目录下的文件: 可以发现用的SQLite 3.6.16.1。 据说,Google在它的Desktop for Mac,Google Gears,以及Android,甚至Chrome中都用到S QLite,而且,Google的工程师对SQLite的全文检索功能作了很大的贡献(contribution)。还有Apple,Micorsoft,SUN等等,这里就不列举了。详细见https://www.doczj.com/doc/744848938.html,/famous.html。有这些公司的参与,对SQLite的发展应该有很大的帮助,尤其是像Google这样的用户。 2、实现与应用 下面从实现及应用的角度来谈谈SQLite,先看看SQLite的特点(功能)吧。 特点 简单(simple):SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS:一个头文件,一个动态库文件,你就拥有了关系数据库的所有功能了。简单,是SQLite最明显的哲学。它提供的API少而简单。只需要一个DLL文件,你的程序马上就拥有了一个功能强大的数据库引擎,这是一件很美妙的事。 小巧(small):我用VS 2005在Windows下编译的3.6.11,Release版为368K,用时不到20秒——而编译MySQL时,要花上几分钟。而当我插入10000条int数据时,内存开销660K,磁盘开销92 K。 事务(transaction):事务是现代商业数据处理系统最基本的要求,而Access,不论是在可执行文件大小(看了一下Access2003的可执行文件大小为6.32M,两者不是一个量级),还是事务特性,都是不能和SQLite 相比的。 并发性(Concurrency):由于SQLite通过OS的文件锁来实现库级锁,粒度很大,但是,它通过一些复杂特殊的处理(具体可以参见分析系列),尽量的提升了读写的并发度。如果你还有担心,你可以看看这篇文章:https://www.doczj.com/doc/744848938.html,/database/sqlite_cms.html。 SQL92:SQLite支持绝大部分的标准SQL语句,你只需要几百K的空间,就可以换来需要上百兆的通用DBMS几乎所有操作了。 方便(Convenience):如果你的程序要使用SQLite,只需要将拷贝你的程序目录即可。

SQLite 数据库文件分析

SQLite数据库文件分析 前言 性急的兄弟可以跳过前言直接看第1章,特别性急的兄弟可以跳过前面各章,直接看鸣谢。最近对SQLite数据库很感兴趣,认真地学了有半个多月了,越学越觉着好玩。好玩归好玩,只是目前没什么实际用途,那就写点儿东西吧,否则半个月不是白学了嘛! SQLite数据库包括多方面的知识,比如VDBE什么的。据说那些东西会经常变。确实,我用的是3.6.18版,我看跟其它文档中描述的3.3.6的VDBE已经很不一样了。所以决定先写文件格式,只要是3.?.?的版本,文件格式应该不会有太大变化吧。 网上介绍SQLite文件格式的文章并不少,但一般都是针对小文件:一个表,几条记录,两个页。本文准备一直分析到比较大的文件,至少B-tree和B+tree中得有内结点(就是说不能只有一个既是根又是叶的结点,就是说表中得多点记录,得建索引),还要争取对SQLite 的各类页都做出分析。 在分析的过程中,争取把SQLite数据库关于文件格式的基本规定也都介绍一下。这样,本文既是一个综合性的技术文档,又带有实例说明,兄弟们参考时岂不是就很方便了吗?既然是技术文档,要想读懂总得先掌握点SQLite数据库的基本知识吧。所以,先介绍参考文献。 0.1 参考文献 1-The Definitive Guide to SQLite . Michael Owens:据说是比较经典的SQLite著作,我看写得是挺好的。边看边翻译了其中的主要部分,但不敢拿出来,大家还是看原文吧。 2-SQLite源代码:其实有关SQLite的最原始说明可能都在源代码中了。把此项列在第2,只是因为我是先看的书再看的代码,估计大家也会是这个顺序吧。先浏览一下代码还是很有收获的,特别是几个主要的.h文件,对本文的写作很有帮助。有关文件格式的说明主要在btreeInt.h中。 3-SQLite入门与分析:网上Arrowcat的系列文章。Arrowcat应该是一个很博学的人,看他的文章收获很大,在此也算是鸣谢吧。 4-SQLite . Chris Newman:我没看,因为也是网上能够下载到的重要资源,所以也在此列出。看目录内容应该比参考文献1简单一些,但出版日期也更早了一些。 5-NULL:在网上搜了半天,国内为什么就没有关于SQLite的好书呢? 6- https://www.doczj.com/doc/744848938.html,/fileformat.html:如果这篇文章看懂了,其实我这篇东西根本就不用再看了。这是介绍SQLite文件格式的权威文档,列在最后,是因为我也是写完这篇东西后才看到的。该文档由SQLite官方网站提供,当初没看,一是因为上网少,还没仔细浏览人家的网站就开始干了(太激动),其实归根结蒂还是因为英语不好。看到此文档这后还敢把我的东西发出来,有两个原因:一、为其他英语比我强不了多少的兄弟提供一点方便,二、我这里有例子,看起来更形象一些吧。

SQLite数据库中如何列出所有的表和索引

SQLite数据库中如何列出所有的表和索引 如果你运行sqlite3命令行来访问你的数据库,可以键入“.tables”来获得所有表的列表。或者,你可以输入“.schema” 来看整个数据库模式,包括所有的表的索引。输入这些命令,后面跟一个LIKE模式匹配可以限制显示的表。 在一个C/C++ 程序中(或者脚本语言使用Tcl/Ruby/Perl/Python 等)你可以在一个特殊的名叫SQLITE_MASTER上执行一个SELECT查询以获得所有表的索引。每一个SQLite 数据库都有一个叫SQLITE_MASTER 的表,它定义数据库的模式。 SQLITE_MASTER 表看起来如下: CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT ); 对于表来说,type字段永远是'table',name字段永远是表的名字。所以,要获得数据库中所有表的列表,使用下列SELECT语句: SELECT name FROM sqlite_master WHERE type='table' ORDER BY name; 对于索引,type等于'index', name则是索引的名字,tbl_name是该索引所属的表的名字。不管是表还是索引,sql字段是原先用CREATE TABLE 或CREATE INDEX 语句创建它们时的命令文本。对于自动创建的索引(用来实现PRIMARY KEY 或UNIQUE 约束),sql字段为NULL。 SQLITE_MASTER 表是只读的。不能对它使用UPDATE、INSERT 或DELETE。它会被CREATE TABLE、CREATE INDEX、DROP TABLE 和DROP INDEX 命令自动更新。临时表不会出现在SQLITE_MASTER 表中。临时表及其索引和触发器存放在另外一个叫SQLITE_TEMP_MASTER 的表中。SQLITE_TEMP_MASTER 跟SQLITE_MASTER 差不多,但它只是对于创建那些临时表的应用可见。如果要获得所有表的列表,不管是永久的还是临时的,可以使用类似下面的命令:SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type='table' ORDER BY name

如影随形的数据库嵌入式数据库简介

如影随形的数据库嵌入式数据库简介 手机从仅能打电话、发短信发展到现在,已增加了诸多功能,如彩信、音乐、摄影等,功能应用多了,系统就变得复杂,嵌入式数据库作为共用的数据管理模块,实现了手机资源的共享。 说起近些年CPU(中央处理器)技术的发展,很多用户都耳闻能详,而对于嵌入式系统的发展,却没有足够了解。引用康佳集团股份有限公司技术中心经理陶显芳的话,现在每年只有10%~20%的计算机芯片是专为电脑设计,而每年近10~20亿个CPU(80%~90%)或是SOC(系统级芯片)是为嵌入式系统设计制造的。 嵌入式系统涵盖多领域 计算机作为一个系统的核心或关键部件,同系统中的其它部分协同作用来完成整个系统的任务,即计算机镶嵌在系统中发挥其作用,这类计算机系统被称为嵌入式计算机应用系统,嵌入式系统几乎涵盖了所有领域。 Oracle公司大中华区嵌入业务总监胡德旺告诉记者,嵌入式系统对数据处理的要求正在逐步增加,用户不仅要求处理大量而复杂的数据,还需要在应用变得更复杂时使数据的处理保持一致性。传统的基于文件系统的自行开发的数据管理系统,因为功能匮乏,开发周期长和维护困难等缺点,已经不能满足应用的要求了。 在嵌入式系统中,对数据库的操作具有定时限制的特性,这里把应用于嵌入式系统的数据库系统称为嵌入式数据库系统或嵌入式实时数据库系统(ERTDBS)。 可靠性要求是毋庸置疑的,嵌入式系统必须能够在没有人工干预的情况下,长时间不间断地运行。同时要求数据库操作具备可预知性,而且系统的大小和性能也都必须是可预知的,这样才能保证系统的性能。 嵌入式系统中会不可避免地与底层硬件打交道,因此在数据管理时,也要有底层控制的能力,如什么时候会发生磁盘操作,磁盘操作的次数,如何控制等。底层控制的能力是决定数据库管理操作的关键。 目前嵌入式软件系统开发的挑战之一,体现在对各种数据的管理能否建立一套可靠、高效、稳定的管理模式,嵌入式数据库可谓应运而生。 嵌入式数据库是嵌入式系统的重要组成部分,也成为对越来越多的个性化应用开发和管理而采用的一种必不可少的有效手段。 嵌入式数据库用途广泛,如用于消费电子产品、移动计算设备、企业实时管理应用、网络存储与管理以及各种专用设备,这一市场目前正处于高速增长之中。 举简单例子,手机原来只用来打电话、发短信,现在手机增加了很多新的功能,比如彩信、音乐、摄影、视频等等,应用的功能多了,系统就变得复杂。 以前手机软件的数据管理模式是每项应用需要自己定义、管理相关的数据,而如今已逐步趋向于用嵌入式数据库作为共用的数据管理模块以提高系统效率,实现手机资源(如影像、图片等)共享,并保持数据的稳

浅谈SQLite

浅谈SQLite:实现与应用 1、前言 有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。惊喜的同时,不得不聊上几句了。 首先,来看看都有哪些人在使用SQLite,主页上列举一长串NB的用户,其中不乏像Adobe,Apple,Firefox,甚至连google,Microsoft,SUN这样的用户。 Firefox:这是我的机器上V3.5.7安装目录下的文件: 可以发现用的SQLite 3.6.16.1。 据说,Google在它的Desktop for Mac,Google Gears,以及Android,甚至Chrome 中都用到SQLite,而且,Google的工程师对SQLite的全文检索功能作了很大的贡献(contribution)。还有Apple,Micorsoft,SUN等等,这里就不列举了。详细见 https://www.doczj.com/doc/744848938.html,/famous.html。有这些公司的参与,对SQLite的发展应该有很大的帮助,尤其是像Google这样的用户。 2、实现与应用 下面从实现及应用的角度来谈谈SQLite,先看看SQLite的特点(功能)吧。 特点

简单(simple):SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS:一个头文件,一个动态库文件,你就拥有了关系数据库的所有功能了。简单,是SQLite最明显的哲学。它提供的API少而简单。只需要一个DLL文件,你的程序马上就拥有了一个功能强大的数据库引擎,这是一件很美妙的事。 小巧(small):我用VS 2005在Windows下编译的3.6.11,Release版为368K,用时不到20秒——而编译MySQL时,要花上几分钟。而当我插入10000条int数据时,内存开销660K,磁盘开销92K。 事务(transaction):事务是现代商业数据处理系统最基本的要求,而Access,不论是在可执行文件大小(看了一下Access2003的可执行文件大小为6.32M,两者不是一个量级),还是事务特性,都是不能和SQLite 相比的。 并发性(Concurrency):由于SQLite通过OS的文件锁来实现库级锁,粒度很大,但是,它通过一些复杂特殊的处理(具体可以参见分析系列),尽量的提升了读写的并发度。如果你还有担心,你可以看看这篇文章: https://www.doczj.com/doc/744848938.html,/database/sqlite_cms.html。 SQL92:SQLite支持绝大部分的标准SQL语句,你只需要几百K的空间,就可以换来需要上百兆的通用DBMS几乎所有操作了。 方便(Convenience):如果你的程序要使用SQLite,只需要将拷贝你的程序目录即可。 开源(Opensource):这是它最强大的地方。开源,意味着你可以品读它的源码,你可以随时修改它,加入你自己的特性,而这一切完全免费的。开源,是一种精神。 实现部分 好了,现在从实现的角度来谈谈个人体会,这也是我比较关注的。 SQLite是一款优秀的嵌入式数据库管理系统,这里有两层含义:一是它经常作为动态库嵌入到应用程序;另外一方面它通常用于嵌入式设备或其它要求较低的桌面应用。如果把它作为内存数据库,个人觉得不是很适合。毕竟,它的写并发性不是很好,此时,TimesTen

QSQLite 数据库

这里我们只是演示了一下使用这个框架完成最简单的程序的过程,只起到抛砖引玉的作用。这个框架很复杂,但是功能也很强大,Qt Creator中自带了几个相关的例子(在帮助中查找Graphics View Examples即可),你可以参考一下。因为篇幅问题,我们就只讲这么多,如果以后有机会,我会推出一个相关的专题来讲述这个框架。 分类:Qt系列教程作者: yafeilinux 日期:四月 30th, 2010. 3,006 views Tags: 2D绘图, creator, qt, yafeilinux, 教程

二十一、Qt数据库(一)简介 本文章原创于https://www.doczj.com/doc/744848938.html,转载请注明出处。 从今天开始我们学习Qt数据库编程的内容。 先说明:我们以后使用现在最新的基于Qt 4.6.2的Qt Creator 1.3.1 Windows版本,该版本是2010年2月17日发布的。 数据库几乎是每个较大的软件所必须应用的,而在Qt中也使用QtSql模块实现了对数据库的完美支持。我们在Qt Creator的帮助中查找QtSql Module,其内容如下图: 可以看到这个模块是一组类的集合,使用这个模块我们需要加入头文件#include ,而在工程文件中需要加入一行代码:QT += sql 这里每个类的作用在后面都有简单的介绍,你也可以进入其中查看其详细内容。下面我们先简单的说一下QSqlDatabase类和QSqlQuery类。 QSqlDatabase类实现了数据库连接的操作,现在Qt支持的数据库类型有如下几种: 而现在我们使用的免费的Qt只提供了SQLite和ODBC数据库的驱动(我们可以在Qt Creator 安装目录下的qt\plugins\sqldrivers文件夹下查看),而其他数据库的驱动需要我们自己添加。SQLite是一个小巧的嵌入式数据库,关于它的介绍你可以自己在网上查找。 QSqlQuery类用来执行SQL语句。(关于SQL语句:在我的教程中只会出现很简单的SQL语句,你没有相关知识也可以看懂,但是如果想进行深入学习,就需要自己学习相关知识了。)

《嵌入式系统与开发》嵌入式数据库sqlite移植及使用-实验报告答案

《嵌入式数据库sqlite移植及 使用》 实验报告 学生姓名: 学号: 专业班级: 指导教师: 完成时间:

实验3 嵌入式数据库sqlite移植及使用 一.实验目的 理解嵌入式软件移植的基本方法,掌握sqlite数据库软件移植的步骤,掌握sqlite 开发的两种方式—命令模式和C代码开发模式的使用方法,并编程实现简单通讯录查询实验。 二.实验内容 实验3.1 移植嵌入式数据库sqlite 实验3.2 简单通讯录查询实例设计和测试 三.预备知识 Linux使用、数据库相关知识等 四.实验设备及工具(包括软件调试工具) 硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。 软件:WinXP或UBUNTU开发环境。 五.实验步骤 5.1 移植嵌入式数据库sqlite 步骤【参看教材103页】: 第一步,解压缩sqlite源码,命令______________________________________,在解压后的文件夹下,可以看到源码文件有_______________和_____________文件,生成Makefile的配置脚本文件_____________________,并检查当前文件夹下__________(A.存在 B.不存在)Makefile文件。 第二步利用configure脚本文件生成基于ARM实验台的Makefile,具体命令为____________________________________________________________________________(假设安装目录为/opt/sqlite),并检查当前文件夹下__________(A.存在 B.不存在)Makefile文件。 第三步,编译sqlite,命令为______________________________________,编译过程中使用的编译器为___________________________。 第四步,安装sqlit,命令为_________________________。安装完成后到____________________文件夹下去查看相关文件,可以看到该文件夹下有__________、__________、__________和share 文件夹,其中可执行文件sqlite3位于_________文件夹,库位于_______________文件夹。 第五步,将sqlite3拷贝到开发板bin目录下,将库下的文件拷贝到开发板的lib目录下【注意链接文件的创建】 第六步,数据库的使用 方式1:命令操纵数据库 在超级终端环境下创建数据库stucomm.db,命令为__sqilte3 stucomm.db__________________________________; 创建数据表stutable,字段包括id 整型,name 字符型,phoneNum 字符型,具体命令为_____create table stutable(id integer ,name text,phoneNum text)________________________________________________________________________________; 插入2条记录,记录信息如下 001,zhangsan,10086

相关主题
文本预览