区分嵌入式数据库和非嵌入式(客户机/服务器)数据库系统

更新时间: 2024-08-07 11:00:10来源: 粤嵌教育浏览量:799

90年代末以来,数据库系统激增。尽管当时的选择相对较少,但现在有数百种数据库系统可供选择,涵盖了不同的架构、API、模型等。本文将对嵌入式和客户端/服务器两种数据库系统架构进行比较和对比。

 

在这些体系结构中,可以找到各种类型的数据库系统:

关系型/SQL

分层

网络模型(层次结构的超集)

图形数据库(网络模型的超集)

NoSQL

NewSQL

Columnar

内存/持久/混合

等等。

即使是NoSQL也包含了一系列的模型、文档、键/值、宽列等。

 

嵌入式数据库系统的关键区别在于,它们与应用程序紧密集成,提供本地数据存储,而不依赖于单独的数据库服务器。换句话说,数据库功能被编译并与应用程序代码链接,这样应用程序就可以直接调用数据库系统,就像它调用宿主语言库的标准函数(例如标准C库)一样。这消除了执行路径中的进程间通信以及由此带来的所有延迟。

 

消除客户端/服务器负担还可以减少数据库系统的代码大小和资源消耗需求。结果是一个更小、更快的数据库系统。这使得嵌入式数据库系统更适合资源受限的嵌入式系统。然而,请注意,“嵌入式数据库”一词与“嵌入式系统”一词完全无关。

 

嵌入式数据库系统至少从80年代早期就已经出现了,远远早于嵌入式系统拥有足够的处理能力来利用任何类型的数据库系统。8位和16位嵌入式系统无法寻址足够的内存,所以直到90年代后期基于32位处理器的嵌入式系统变得普遍,嵌入式数据库系统才开始在嵌入式系统中使用。

 

因此,嵌入式数据库系统产生于在WindowsUnix和类Unix系统上为一系列业务应用程序提供数据库支持的需求。

 

嵌入式数据库系统的嵌入式特性限制了它们的可扩展性。但是,考虑到用例,这并不是一个问题。由于没有进程间通信,共享数据库的所有并发任务都存在于一个系统中,并且可以在单个系统上启动的进程和/或线程的数量存在固有的限制,即使是具有数十个内核和数百或数千GB内存的相对较大的Linux系统。

 

相比之下,在强大的服务器上托管的客户机/服务器数据库系统可以有10个、100个或1000个连接到数据库服务器并请求数据库系统的CRUD(创建、读取、更新、删除)服务的其他系统。这些系统需要能够比嵌入式数据库系统更大程度地扩展。

 

客户端和服务器的分离还可以提高整个系统的安全性/可靠性。因为嵌入式数据库与应用程序相链接,所以它们共享相同的地址空间。这使得错误的应用程序有可能破坏数据库或嵌入式数据库系统运行时,或者同时破坏两者。

 

通过独立的客户端和服务器进程,操作系统可以将数据库服务器与恶意应用程序隔离开来。客户端进程也可能运行在完全独立的系统中,进一步将它们与数据库服务器隔离开来。

 

嵌入式数据库比客户机/服务器数据库更容易部署和维护。嵌入式数据库系统只是应用程序安装过程中的一部分。客户机/服务器数据库系统必须单独安装,通常安装在单独的服务器上。还必须对其进行配置,以提高可伸缩性。这通常需要数据库管理员(DBA)的参与。

 

有一种说法认为客户端/服务器数据库擅长复杂的操作/事务,但嵌入式数据库系统中通常没有任何固有的东西可以阻止它们执行同样复杂的操作。当然,SQL语言的覆盖范围的完整性以及SQL引擎优化器的质量存在差异,但客户端/服务器和嵌入式数据库系统都是如此。嵌入式数据库系统只提供原生的、非SQL的、API,这使得在不同表的列上实现与排序、过滤和聚合等同的多目标联接变得困难和/或不切实际。

 

总之,为了简单、资源效率和本地数据存储,选择嵌入式数据库。选择可扩展性和集中管理至关重要的客户端/服务器系统。

免费预约试听课