面向 IoT 开发人员的嵌入式数据库入门
Actian Zen 为嵌入式系统开发人员提供了一个符合 ACID 标准的数据库,它能够在各种环境中无缝联网,加速开发并降低维护成本。
任何成功应用程序的关键,无论是处理银行交易还是监测患者心跳,都是在指定时间内处理数据。访问数据所需的时间会造成延迟并延迟操作。对于传感器和使用流数据的移动设备等读写密集型应用程序来说,延迟尤其是一个问题。
将数据库与应用程序一起嵌入到设备上,通常可以减少延迟。限制延迟并非没有代价。我们可能会失去集中化带来的一些优势,例如规模和维护。此外,您最终可能会拥有数百或数千个设备,每个设备都有一个需要维护的数据库,每个设备都有发生故障的可能性。因此,更需要将维护和容错工程化到解决方案中。
虽然这些嵌入式数据库需要在设备级别独立运行,但重要的是要认识到它们不仅仅是数据孤岛。它们是设备网络的一部分。至少部分数据会传输并集成到更高级别的数据库中,以供进一步操作。将这些设备视为孤岛要么会次优化数据的价值,要么会忽略数据集成的复杂性。
有各种嵌入式数据库可用。除了硬件和软件要求之外,评估其适用性时需要关注的一些关键点是:
- 它们是否支持创建、读取、更新和删除 (CRUD)?
- 它们是否符合原子性、一致性、隔离性、持久性 (ACID) 标准?
- 它们是否能够在多个平台和语言上运行?
- 它们能否将数据无缝移动到更集中的数据库?
- 它们是否零维护且独立于 DBA?
理想情况下,任何嵌入式数据库都应具备这些功能。然而,根据具体情况,一些数据库解决方案选择不包含其中一些功能,以优化其他功能。
数据库要求
在几乎所有使用嵌入式数据库的情况下,必须以适合嵌入式应用程序分析和操作的方式存储多个复杂数据流。这些数据库从多个源接收数据,并且必须能够执行并发读写。数据库不仅需要存储数据,还需要在系统故障时保持其完整性和可恢复性。
虽然 CRUD 允许更改数据,但在维护数据完整性方面存在不足。ACID 提供更高的标准。
一条记录通过多个语句写入数据库。原子性要求数据库接受构成该记录的所有语句或不接受任何语句。一致性阻止进行无效更改。以隔离方式写入数据允许并发写入多条记录而不相互影响。持久性意味着,一旦记录提交到数据库,即使系统发生故障,它也保持提交状态。
违反 ACID 要求会增加数据库损坏的风险。当我们考虑嵌入式数据库时,我们谈论的不是单个位置的单个数据库。在涉及数百甚至数千个设备的环境中,发生故障的可能性更大,这增加了拥有符合 ACID 标准的数据库的重要性。
嵌入式数据库的类型
有各种不同类型的数据库可用于嵌入式应用程序。它们是
- SQL 数据库,例如 SQLite
- 时间序列数据库,例如 Influx
- 数据历史系统
每种数据库都具有使其适用于特定情况的特点。
传统的 SQL 数据库,例如 MySQL、SQLite 或 VistaDB,可以在嵌入式实现中使用,但通常需要在占用空间或功能方面进行权衡。例如,SQLite 实现了大多数标准 SQL。虽然它符合 ACID 标准,但它使用动态且弱类型的 SQL 语法。它不保证域完整性。虽然 MySQL 或 Oracle 等数据库实现了共享存储库,但 SQLite 为单个应用程序和设备提供本地数据。它强调设备级别的简单性、效率、独立性和可靠性。因此,它牺牲了一些与其他设备和数据库联网的能力。
时间序列数据库在各种用例中检测、观察、学习和自动化系统、应用程序和业务流程。时间序列数据库为了速度而牺牲了一些 ACID 特性。例如,如果系统试图优化写入次数,它可能会缩短记录被锁定的时间,从而影响一致性。如果它们只关心本地数据并且时间很短,则持久性可能无关紧要。虽然这些妥协在本地可能不是问题,但它们可能会在更高层次集成数据时产生问题。此外,一些时间序列数据库不提供完整的 CRUD 功能,优先考虑创建和读取数据而不是更新和删除数据。
数据历史系统旨在收集和存储大量带时间戳的数据。通常,它们旨在以最少的存储空间和快速检索的方式从众多设备收集读数。数据历史记录器嵌入在设备上,主要用于捕获和转发信息。虽然它们可能提供基于 SQL 的查询接口,但它们不一定遵循标准 SQL 语法,这限制了它们对嵌入式应用程序的实用性以及它们在没有额外 ETL 开发的情况下与 SQL 数据库集成的能力。总的来说,它们是创建-读取数据库,并且缺少许多数据完整性功能。
Actian Zen
Actian Zen 产品套件提供了一个符合 ACID 标准的嵌入式数据库,它可以无缝集成到从 Android 和 iOS 移动应用程序到物联网边缘设备,再到群组和企业级别的各种环境中,从而无需开发和维护额外的 ETL 来进行数据库之间的转换。
Actian Zen 系列中的每个产品都是零 DBA 维护和开发人员可配置的。这些因素对于在各种平台和版本上部署和维护嵌入式数据库都非常重要。
嵌入式系统需要在跨平台、数据管理系统和文件系统上运行。Actian Zen 数据库系列几乎可以在所有平台上运行,并支持数据的无缝传输和大多数流行的编程环境,从而无需为多个环境开发实例。
Actian Zen 安装隐藏在应用程序中(静默安装),开发人员可以使用 API 选择所需的组件并消除不需要的功能,以最大限度地减少占用空间。
Actian Zen Edge Server 旨在驻留在边缘和物联网设备上。它是一个零 DBA、自优化解决方案,支持 SQL 和 NoSQL 访问。它的安装占用空间为 30-40MB。Edge Server 支持以下平台:
- Raspbian 上的 Linux 发行版(Ubuntu、Debian、Arch 等)
- Windows 10 IoT Core Server
- Raspberry Pi 2 或更高版本
- Intel x86/x64 和 ARM 32 位/64 位
开发人员可以选择使用完整的 ANSI SQL 或 API 级别访问键值存储,由 Btrieve 2 API 支持原生 Java、C/C++ 以及 Simplified Wrapper and Interface Generator (SWIG) 生成的到 Python、Perl、C# 和 PHP 等脚本语言的绑定。
Actian Core
Actian Core 是一款适用于智能手机和其他需要小占用空间(最小 2MB)的物联网设备的 NoSQL 嵌入式、零 DBA、自优化数据库。它使用与 Actian Zen 产品线其余产品相同的文件格式,便于数据可移植性。
它支持以下平台:
- Android 5 或更高版本
- iOS 10.3 或更高版本
- Android Things 1.0 或更高版本
- Android SDK 25 或更高版本
- Xcode 9.3 与 iOS SDK 11.3
- Actian Zen Core SDK
它通过 B-trieve 2 API 提供直接数据访问。Btrieve 2 API SDK 还包括:
用于 Perl、PHP 和 Python 的 SWIG 文件。
Edge Server 和 Core 与整个 Actian Zen 产品套件一起,为物联网环境中的数据库部署提供了完整的端到端解决方案。
结论
市场上每种类型的数据库解决方案都经过优化,可以处理特定类型的数据或环境。Actian Zen 为嵌入式系统开发人员提供了一个符合 ACID 标准的数据库,它能够在各种环境中无缝联网,加速开发并降低维护成本。