数据库分关系型数据库和非关系型数据库两种,今天我们来聊一聊关系型数据库中的嵌入式数据库。如无特殊说明,本文所提到的「数据库」均指关系型数据库。

什么是嵌入式数据库

嵌入式数据库 ( Embedded database ) 跟嵌入式设备是不相关的两个概念,尽管它可以运行在手机、平板电脑或树莓派上。

嵌入式数据库将 DBMS ( Database Management System ) 构建到应用程序中,而不是作为一个独立的工具提供,通常数据库管理工具对终端用户是不可见的,需要的维护较少或者根本不需要用户来维护。

存在的意义

先来了解一个名词「边缘计算」。

与云计算 ( Cloud Computing ) 相对,边缘计算 ( Edge Computing ) 是指将数据的处理与运算,由网路中心节点,移往网路逻辑上的边缘节点来处理。它更接近终端装置和数据来源,以便加快资料的处理与传送速度,减少延迟,对物联网和大数据分析有重要意义。

-c

边缘计算的终端装置多为嵌入式设备,性能有限,而边缘计算却需要组织结构化的数据,用传统的数据库显然不合适。此时,嵌入式数据库低资源占用、高性能的优势就体现出来了。嵌入式数据库更适合用于终端设备或 C/S 的桌面程序上,是边缘计算的重要组成部分。

冰与火

嵌入式数据库通常是基于单个文件的,环境简单对开发和迁移较为友好,同时追求最大的磁盘读写性能。

「嵌入式」意味着它将直接关联应用程序,如果用户在安装软件时不必安装和管理一个单独的数据库,安装程序将会简单得多,开发者也不必为潜在的数据库问题提供支持,用户也减少了麻烦。

通常采用嵌入式数据库会让你的程序运行的更快,因为它避免了进程间的通信和网络的消耗。

前面讲了嵌入式数据库的这么多优点,不过要注意的是,嵌入式数据库可并非万金油,低资源占用的背后必然是牺牲了一些特性:

  1. 不适用于大规模数据的处理。
  2. 对 SQL 标准的支持不够完善。
  3. 没有完备的备份和集群机制。
  4. 通常是单用户的,吞吐量有限,缺乏并发性支持。
  5. 没有完备的权限和加密机制。

何时使用

  1. 嵌入式应用:

    所有需要迁移性,不需要扩展的应用,例如,单用户的本地应用,移动应用和游戏。

  2. 代替磁盘访问:

    在很多情况下,需要频繁直接读/写磁盘文件的应用,都就适合转为使用嵌入式数据库 。

  3. 测试:

    嵌入式数据库一般都实现了大部分常用的 SQL 标准,能满足大部分专门针对应用业务逻辑的测试。

常见的嵌入式数据库

  1. SQLite
    • 免费,支持多平台,单用户的DBMS。
    • 支持几乎所有的编程语言,Android 开发默认的数据库。
    • 应用面广泛、性能较高。
    • 原生不支持 C/S 模式的网络连接。
    • 不支持存储过程。
  2. Access
    • 收费,可定制性较差。
    • 支持 C、C#、C++、Delphi、Java (JDBC-ODBC)、VBA、Visual Basic.NET 等多种语言。
    • 仅支持Windows平台。
    • 性能相对较低。
    • 支持存储过程。
  3. Apache Derby
    • Apache 基金会的子项目,基于 Apache License, Version 2.0. 开源。
    • 纯 Java 实现的嵌入式数据库,依赖 JVM,跨平台,仅支持Java语言。
    • JDK 内置 Derby 数据库,在 ${JAVA_HOME}/db 目录下可以找到。
    • 支持 C/S 模式的网络连接。
    • 支持存储过程。