首页 > 编程知识 正文

简述数据库的三级模式体系结构,sqlite视频教程

时间:2023-05-05 01:46:00 阅读:164559 作者:2940

一.个人资料:

SQLite是目前最流行的开源嵌入式数据库,与许多其他嵌入式存储引擎(如BerkeleyDB、MemBASE等)相比,SQLite具有标准的SQL语法、事务和数据表事实上,SQLite具有许多关系数据库的基本特征,但在某些APP场景下无法进行进一步的比较。 请列举一下SQLite的主要特征。

1 )管理简单,甚至认为不需要管理。

2 )操作简单,SQLite生成的数据库文件可以在各平台无缝移植。

3 ) .可以通过各种形式(例如静态库、动态库等)轻松集成到其他APP应用程序中。

4 )维护方便。

如上所述,SQLite的主要优点是灵巧、快速和可靠。 为了实现这一目标,SQLite的设计人员在功能方面做出了许多重要的取舍,但同时也失去了对RDBMS关键功能的支持,包括高并发性、细粒度访问控制、丰富的内置函数、存储过程和复杂的SQL语句。 正是因为牺牲了这些功能,所以才简单且容易地转换成了效率和可靠性。

二. SQLite的主要优点:

1 .一致的文件格式:

SQLite的官方文档中是这样说明的。 不应将SQLite与Oracle或PostgreSQL进行比较,而应将其视为fopen和fwrite。 与SQLite专有格式的数据文件相比,SQLite不仅根据特定信息(如大字节序、32/64位等)编制索引,还根据特定信息对这些数据进行访问和排序此外,处理普通文件时,SQLite提供的事务功能也无法有效保证。

2 .应用于嵌入式或移动设备:

由于SQLite在运行时使用的资源很少,而且没有管理开销,所以SQLite对PDA和智能手机等移动设备来说毫无疑问具有优势。

3 .内部数据库:

在某些APP应用场景中,必须对插入到数据库服务器中的数据进行数据过滤或数据清理,以确保最终插入到数据库服务器中的数据的有效性。 在某些情况下,无法通过单一记录来确定数据是否有效,需要与不久前的历史数据进行特殊计算,并根据计算结果来确定当前数据是否合法。 在这些APP应用程序中,可以用SQLite缓冲此历史数据的一部分。 另一个简单的场景也适用于SQLite。 也就是说,统计数据的预计计算。 例如,如果运行的是实时收集数据的服务程序,则可能需要汇总每10秒钟的数据,以创建每小时的统计数据。 该统计数据大大减少了用户查询时的数据量,大大提高了前端程序的查询效率。 通过该APP应用程序,可以将一小时内收集的所有数据缓存在SQLite中,并在达到完整点时计算缓存数据并清空。

4 .数据分析:

可以利用SQLite提供的SQL特征来完成简单数据统计分析的功能。 这不能和CSV文件相比。

5 .产品Demo和测试:

如果需要为客户提供Demo,可以将SQLite用作后台数据库。 与其他关系数据库相比,使用SQLite可以大大缩短系统部署时间。 SQLite在产品功能测试中也起到同样的作用。

三.与RDBMS相比,SQLite的一些劣势:

1 .信用证APP :

当多个客户端需要同时访问数据库中的数据时,尤其是他们之间的数据操作必须通过网络传输。 在这种情况下,不应该选择SQLite。 由于SQLite的数据管理机制多依赖于OS的文件系统,所以在这样的操作中效率很低。

2 .数据量大:

受操作系统限制的文件系统在处理大数据量时效率低下。 对于数据量巨大的存储,甚至无法支持。

3 .高合并:

由于SQLite仅提供粗数据锁定(如读写锁定),因此每次锁定操作都会锁定大量数据,即使只有很少一部分数据可以访问。 这意味着SQLite只提供表级锁,而不提供行级锁。 这种同步机制很难有效地实现并发性能。

四.个性化特点:

1 .零配置:

SQLite本身不需要初始化配置文件。 另外,也没有安装和卸载的过程。 当然,也不会启动和停止服务器实例。 使用过程中也不需要创建用户或划分权限。 如果系统出现故障(如电源问题或主机问题),SQLite不需要执行任何操作。

2 .没有独立的服务器:

与其他关系数据库不同,SQLite没有单独的服务器进程可供客户端程序访问和提供相关服务。 SQLite是嵌入式数据库的一种,由于执行环境与主程序位于同一进程空间,所以它们之间的通信完全是进程内通信,比进程间通信更有效。 但是请注意,该结构在实际运行时存在保护性低的问题。 例如,如果APP应用程序出现问题,导致进程崩溃,并且SQLite与它所依赖的进程位于同一进程空间中,则SQLite也会退出。 但是,独立的服务器进程没有这个问题,可以在密闭的环境中完成工作。

3 .单磁盘文件:

SQLite数据库存储在文件系统的单个磁盘文件中(如果有权限)

随意访问和拷贝,这样带来的主要好处是便于携带和共享。其他的数据库引擎,基本都会将数据库存放在一个磁盘目录下,然后由该目录下的一组文件构成该数据库的数据文件。尽管我们可以直接访问这些文件,但是我们的程序却无法操作它们,只有数据库实例进程才可以做到。这样的好处是带来了更高的安全性和更好的性能,但是也付出了安装和维护复杂的代价。

4. 平台无关性:

这一点在前面已经解释过了。和SQLite相比,很多数据库引擎在备份数据时不能通过该方式直接备份,只能通过数据库系统提供的各种dump和restore工具,将数据库中的数据先导出到本地文件中,之后在load到目标数据库中。这种方式存在显而易见的效率问题,首先需要导出到另外一个文件,如果数据量较大,导出的过程将会比较耗时。然而这只是该操作的一小部分,因为数据导入往往需要更多的时间。数据在导入时需要很多的验证过程,在存储时,也并非简简单单的顺序存储,而是需要按照一定的数据结构、算法和策略存放在不同的文件位置。因此和直接拷贝数据库文件相比,其性能是非常拙劣的。

5. 弱类型:

和大多数支持静态类型的数据库不同的是,SQLite中的数据类型被视为数值的一个属性。因此对于一个数据表列而言,即便在声明该表时给出了该列的类型,我们在插入数据时仍然可以插入任意类型,比如Integer的列被存入字符串'hello'。针对该特征唯一的例外是整型的主键列,对于此种情况,我们只能在该列中存储整型数据。

6. SQL语句编译成虚拟机代码:

很多数据库产品会将SQL语句解析成复杂的,相互嵌套的数据结构,之后再交予执行器遍历该数据结构完成指定的操作。相比于此,SQLite会将SQL语句先编译成字节码,之后再交由其自带的虚拟机去执行。该方式提供了更好的性能和更出色的调试能力。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。