本文目录导读:

在 PHP 中,"边缘数据库" 通常指在物联网(IoT)、边缘计算场景中运行在资源受限设备(如树莓派、路由器、嵌入式系统)上的轻量级数据库,常见的边缘数据库包括 SQLite、DuckDB(嵌入式分析型)、UnQLite 或 Berkeley DB。
以下是在 PHP 中操作这些边缘数据库的核心方法和示例。
SQLite(最常用,推荐)
SQLite 是 PHP 原生支持的内嵌式数据库,无需额外安装服务,文件存储,非常适合边缘设备。
连接与创建
<?php
// 创建/打开数据库文件
$db = new SQLite3('/path/to/edge.db');
// 创建表
$db->exec("CREATE TABLE IF NOT EXISTS sensors (
id INTEGER PRIMARY KEY AUTOINCREMENT,
value REAL NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)");
?>
插入数据
$stmt = $db->prepare("INSERT INTO sensors (value) VALUES (:value)");
$stmt->bindValue(':value', 25.6, SQLITE3_FLOAT);
$stmt->execute();
查询数据
$result = $db->query("SELECT * FROM sensors WHERE value > 20");
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo $row['value'] . "\n";
}
特点:单个文件,零配置,读写速度适合 IoT。
DuckDB(嵌入式分析型)
DuckDB 是面向分析(OLAP)的嵌入式数据库,占用内存小,支持 SQL 复杂查询,适合边缘端实时聚合数据(如温度平均值、异常检测)。
安装 PHP 扩展
pecl install duckdb # 或在 Docker 中使用 php-duckdb 镜像
基础用法
<?php
$db = new DuckDB\Connection();
// 创建表(内存模式,也可指定文件)
$db->exec("CREATE TABLE sensor_data AS SELECT * FROM read_csv_auto('/data/sensors.csv')");
// 执行复杂分析查询
$result = $db->query("SELECT device, AVG(value) avg_temp
FROM sensor_data
WHERE timestamp > now() - INTERVAL '1 hour'
GROUP BY device");
print_r($result->fetchAll());
?>
特点:适合边缘端需进行实时统计分析的场景。
UnQLite(键值 + 文档混合)
UnQLite 是 JIT 编译的嵌入式 NoSQL 数据库,支持键值对存储和 JSON 文档,占用极小(约 100KB),适合低功耗边缘 MCU。
安装 PECL 扩展
pecl install unqlite
示例
<?php
$db = new UnQLite('/tmp/edge.db');
// 键值存储
$db->store('device:001', json_encode(['temp' => 23.5, 'humidity' => 60]));
// 获取
$device = json_decode($db->fetch('device:001'), true);
echo $device['temp']; // 23.5
// 集合(类似 Mongo)
$db->with('sensors')->set(['id' => 's002', 'value' => 30]);
?>
特点:支持类似 Redis 的键值操作 + 文档查询。
Berkeley DB(嵌入式键值数据库)
Oracle 的嵌入式数据库,广泛用于高可靠边缘设备。
安装
# 需要编译 PHP 时加入 --with-db4 或通过 pecl 安装
PHP 代码
<?php
$env = dbenv::create();
$env->open('/data', DB_INIT_MPOOL | DB_CREATE);
$db = $env->create_db(DB_BTREE);
$db->open(null, 'edge_db', null, DB_BTREE, DB_CREATE, 0664);
// 键值操作
$db->put("sensor:last", "2025-03-17 10:00:00");
$value = $db->get("sensor:last");
$db->close();
$env->close();
?>
特点:极致稳定,适合7x24小时运行的工业边缘设备。
场景选择建议
| 场景 | 推荐数据库 | 理由 |
|---|---|---|
| 边缘端需要标准 SQL,通用性强 | SQLite | PHP 原生支持,零依赖 |
| 需要实时聚合分析(如一分钟平均温度) | DuckDB | 50倍于SQLite的分析加速 |
| 极低功耗设备(如ESP32 php版本) | UnQLite | 最小二进制(~100KB) |
| 工业级高可靠数据采集 | Berkeley DB | ACID 事务支持 |
边缘数据库 PHP 典型架构(树莓派示例)
[传感器] → [Python采集脚本] → [SQLite/JSON文件] → [PHP API] → [本地仪表盘]
↓
[定时同步] → 云端主数据库(非实时)
PHP 在边缘端负责提供REST API或Web界面,对边缘数据库进行读写和查询。