首先,什么是嵌入式数据库?简单地说,它是一个与应用程序编译和链接的数据库系统,也就是说,它“嵌入”在应用程序中。它不同于客户机/服务器数据库系统,在客户机/服务器数据库系统中,客户机和服务器在它们自己的地址空间中运行,并且通常在完全不同的计算机硬件系统中运行。嵌入式数据库运行在与使用它的应用程序相同的地址空间中。
嵌入式数据库出现在70年代末/80年代初。那些头发有些灰白(或没有)的人应该记得dBase(1978)、Empress(1979)、Btrieve(1982)、c-tree(1984)、SQLBase(1984)和db_VISTA(1984)。
在70年代末和80年代初,嵌入式系统是8位和16位系统,对于数据库管理系统等复杂软件,甚至是相对“简单”的嵌入式数据库系统(相对于Oracle、SQLServer等客户端/服务器巨头),都没有足够的可寻址内存。
直到90年代后期,嵌入式系统才开始使用32位处理器,为嵌入式数据库系统提供足够的内存。
但上述所有嵌入式数据库都是在此之前编写的。它们旨在用于在Windows和各种风格的Unix(有人记得SCO Unix吗?)和DEC VAX上运行的业务线应用程序。你问,什么是所谓的业务线应用程序?它是库存、工资、应收账款/应付账款等应用程序。简而言之,它是企业用于运行日常运营的任何应用程序。
随着嵌入式系统进入32位领域,这些平台能够承载更复杂的系统。更多的复杂性通常伴随着要管理的更多数据和更多样的数据。这就叫“我需要一个数据库系统!”那么,你是一个90年代的嵌入式系统软件工程师,你是做什么的?你使用一个现有的嵌入式数据库,并试图将其硬塞进你的嵌入式系统。
这就是问题开始的地方。嵌入式系统,即使是32位系统,也不像笔记本电脑、台式机、工作站或服务器系统。这些通常是x86系统,具有大量内存、大磁盘和快速多核处理器。嵌入式系统通常没有多余的内存,可能根本没有任何持久存储,处理器的速度刚刚够完成工作。该处理器可能是ARM、MIPS、PowerPC或x86。此外,它可能没有运行Windows,也可能没有运行Linux。它可以运行嵌入式/实时操作系统,如embOS、VxWorks、INTEGRITY、QNX、FreeRTOS或许多其他操作系统。
因此,作为一名需要数据库系统的嵌入式系统软件工程师,你的第一份工作是找到一个你可以获得源代码的系统,并将其移植到你选择的处理器、操作系统和工具链上。然后,因为你已经有了一个资源受限的系统,开始去掉你不需要的东西,减少代码大小以适应你的系统。例如,也许你的设备只需要读取预加载的数据库,而不需要写入它。因此,你不需要插入、更新和删除记录的所有代码,以及随之而来的所有负担,如并发控制和ACID事务。
在几次面临这种困境后,我们意识到需要一个首先考虑嵌入式系统的数据库系统,一个不需要彻底手术来适应各种资源受限的嵌入式系统及其各种处理器、操作系统和工具链的数据库系统。
所以,我们来谈谈业务线嵌入式数据库系统和嵌入式系统的嵌入式数据库系统之间的区别。
面向嵌入式系统的嵌入式数据库不需要浪费宝贵的资源,比如CPU时钟周期和内存。它需要消除或至少最小化对C运行时库的依赖,并最小化、消除或隔离对操作系统的依赖。
总之,当你为嵌入式和/或实时系统寻找合适的嵌入式数据库系统时,请确保你考虑的候选系统至少能够声称是在考虑嵌入式系统的情况下开发的。最终,你选择的嵌入式数据库解决方案将能够胜任任务。