当前位置: 首页 > article >正文

WebThings Gateway数据库设计与用户配置管理:深入理解网关数据持久化机制

WebThings Gateway数据库设计与用户配置管理深入理解网关数据持久化机制【免费下载链接】gatewayWebThings Gateway - a self-hosted web application for monitoring and controlling a building over the web项目地址: https://gitcode.com/gh_mirrors/gat/gatewayWebThings Gateway作为一款开源的自托管Web应用提供了对建筑环境的监控和控制能力。其高效的数据持久化机制是确保设备状态、用户配置和系统设置可靠存储的核心。本文将深入解析WebThings Gateway的数据库架构设计、用户配置管理流程以及数据持久化的实现细节帮助开发者和用户更好地理解系统的底层数据处理机制。数据库架构概览SQLite驱动的轻量级解决方案WebThings Gateway采用SQLite作为默认数据库引擎通过文件型数据库实现数据的持久化存储。数据库文件默认位于用户配置目录下的db.sqlite3由src/db.ts模块负责管理数据库连接和核心操作。这种设计选择兼顾了轻量级部署需求和数据可靠性特别适合边缘计算场景下的资源受限环境。图WebThings Gateway核心数据模型与关系示意图1582x542像素数据库连接管理采用单例模式实现通过Database类封装所有SQLite操作。关键实现代码如下// 数据库初始化与连接管理 class Database { private db?: SQLiteDatabase; open(): void { const filename path.join(UserProfile.configDir, db.sqlite3); this.db new sqlite3.Database(filename); this.db.configure(busyTimeout, 10000); // 设置10秒锁定超时 this.db.serialize(() { this.createTables(); this.migrate(); }); } }核心数据表设计结构化存储关键实体WebThings Gateway数据库包含多个精心设计的表结构分别存储不同类型的系统数据。主要表结构及其功能如下1. 设备与分组管理表things表存储已连接设备的元数据CREATE TABLE IF NOT EXISTS things ( id TEXT PRIMARY KEY, description TEXT );每条记录包含设备唯一ID和序列化的设备描述信息支持设备状态的持久化和快速恢复。groups表管理设备分组信息CREATE TABLE IF NOT EXISTS groups ( id TEXT PRIMARY KEY, description TEXT );支持用户自定义设备分组便于批量管理和场景控制。2. 用户与认证表users表存储用户账户信息CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY ASC, email TEXT UNIQUE, password TEXT, name TEXT, mfaSharedSecret TEXT, mfaEnrolled BOOLEAN DEFAULT 0, mfaBackupCodes TEXT );支持多用户管理和双因素认证(MFA)密码通过安全哈希存储确保账户安全。jsonwebtokens表管理用户认证令牌CREATE TABLE IF NOT EXISTS jsonwebtokens ( id INTEGER PRIMARY KEY ASC, keyId TEXT UNIQUE, user INTEGER, issuedAt DATE, publicKey TEXT, payload TEXT );实现无状态的用户认证机制支持API访问控制和会话管理。3. 系统配置表settings表存储系统配置键值对CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT );采用键值对结构存储各类系统设置如网络配置、安全选项和UI偏好等。pushSubscriptions表管理推送通知订阅CREATE TABLE IF NOT EXISTS pushSubscriptions ( id INTEGER PRIMARY KEY, subscription TEXT UNIQUE );支持Web推送通知功能存储用户设备的推送订阅信息。用户配置管理安全与灵活的设置系统WebThings Gateway的用户配置管理通过settings表和专门的模型层实现提供了灵活且安全的配置存取机制。核心实现位于src/models/settings.ts主要功能包括配置存取API// 设置配置项 async setSetting(key: string, value: unknown): PromiseRunResult { value JSON.stringify(value); const currentValue await this.getSetting(key); if (typeof currentValue undefined) { return this.run(INSERT INTO settings (key, value) VALUES (?, ?), key, value); } else { return this.run(UPDATE settings SET value? WHERE key?, value, key); } } // 获取配置项 async getSetting(key: string): Promiseunknown { const res await this.get(SELECT value FROM settings WHERE key?, key); if (!res) return undefined; return JSON.parse((res as { value: string }).value); }典型配置项示例系统配置涵盖多个方面常见的配置键包括tunnelToken用于远程访问的隧道令牌notunnel隧道功能开关wifiskipWiFi设置跳过标志locale用户界面语言设置themeUI主题偏好这些配置通过src/settings_controller.ts暴露REST API供前端界面和系统组件访问。数据迁移与版本兼容平滑升级的保障随着系统版本迭代数据库结构可能需要变更。WebThings Gateway通过migrate方法实现数据库模式的平滑迁移migrate(): void { this.db!.run(DROP TABLE IF EXISTS jsonwebtoken_to_user, () {}); this.db!.run(ALTER TABLE users ADD COLUMN mfaSharedSecret TEXT, () {}); this.db!.run(ALTER TABLE users ADD COLUMN mfaEnrolled BOOLEAN DEFAULT 0, () {}); this.db!.run(ALTER TABLE users ADD COLUMN mfaBackupCodes TEXT, () {}); }这种增量迁移策略确保了旧版本数据库可以无缝升级到新版本避免数据丢失或兼容性问题。迁移逻辑主要处理表结构变更、字段新增和数据迁移等操作。高级数据操作事务与并发控制WebThings Gateway数据库操作通过SQLite的事务机制确保数据一致性。关键操作如用户创建、设备状态更新等都通过事务包装防止部分更新导致的数据不一致// 用户删除操作示例事务处理 deleteUser(userId: number): PromiseRunResult[] { const deleteUser this.run(DELETE FROM users WHERE id ?, userId); const deleteTokens this.deleteJSONWebTokensForUser(userId); return Promise.all([deleteTokens, deleteUser]); }同时通过设置busyTimeout参数10秒处理并发访问冲突确保在多线程环境下的数据库操作稳定性。最佳实践与扩展建议基于WebThings Gateway的数据库设计以下是一些扩展和优化建议性能优化对于大规模部署可考虑定期清理历史数据特别是事件日志和设备状态历史记录。备份策略实现定期数据库备份机制可通过tools/目录下的脚本实现自动化备份。数据加密敏感配置项如认证令牌可考虑在存储前进行加密处理增强安全性。监控告警添加数据库健康监控当数据库文件大小或访问频率异常时触发告警。扩展存储对于需要存储大量历史数据的场景可考虑集成时序数据库如InfluxDB通过src/logs.ts的接口扩展实现。WebThings Gateway的数据库设计体现了轻量级、可靠性和可扩展性的平衡为物联网网关应用提供了坚实的数据存储基础。通过理解这些设计原则和实现细节开发者可以更好地定制和扩展系统功能满足特定场景需求。【免费下载链接】gatewayWebThings Gateway - a self-hosted web application for monitoring and controlling a building over the web项目地址: https://gitcode.com/gh_mirrors/gat/gateway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

WebThings Gateway数据库设计与用户配置管理:深入理解网关数据持久化机制

WebThings Gateway数据库设计与用户配置管理:深入理解网关数据持久化机制 【免费下载链接】gateway WebThings Gateway - a self-hosted web application for monitoring and controlling a building over the web 项目地址: https://gitcode.com/gh_mirrors/gat/…...

PF4J高级特性解析:从依赖管理到安全包装器的完整指南

PF4J高级特性解析:从依赖管理到安全包装器的完整指南 【免费下载链接】pf4j Plugin Framework for Java (PF4J) 项目地址: https://gitcode.com/gh_mirrors/pf/pf4j PF4J(Plugin Framework for Java)是一个轻量级、企业级的Java插件框…...

WEF部署完全手册:在Linux系统上配置专业级Wi-Fi测试环境

WEF部署完全手册:在Linux系统上配置专业级Wi-Fi测试环境 【免费下载链接】WEF Wi-Fi Exploitation Framework 项目地址: https://gitcode.com/gh_mirrors/we/WEF Wi-Fi Exploitation Framework(WEF)是一款功能强大的Wi-Fi安全测试工具…...

SpiceAI Cayenne数据加速器:下一代列式存储格式的终极指南

SpiceAI Cayenne数据加速器:下一代列式存储格式的终极指南 【免费下载链接】spiceai A portable accelerated SQL query, search, and LLM-inference engine, written in Rust, for data-grounded AI apps and agents. 项目地址: https://gitcode.com/gh_mirrors/…...

从SST到MLD:手把手教你用xarray处理CMEMS海洋数据,生成月平均图与全局年平均场

从SST到MLD:xarray实战CMEMS海洋数据处理与可视化全流程 海洋数据科学正经历一场由工具革新驱动的效率革命。在哥白尼海洋环境监测服务(CMEMS)等开放数据平台的推动下,获取全球海洋参数已不再是瓶颈,真正的挑战转向如何…...

BiliBiliCCSubtitle:智能解析引擎驱动的B站字幕处理效率革命

BiliBiliCCSubtitle:智能解析引擎驱动的B站字幕处理效率革命 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 在数字内容产业高速发展的今天&#xff0…...

4种突破数字内容壁垒的技术方案:面向研究者与创作者的开源工具指南

4种突破数字内容壁垒的技术方案:面向研究者与创作者的开源工具指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fa…...

search-engine-optimization内容创作黄金法则:如何写出搜索引擎喜爱的文章

search-engine-optimization内容创作黄金法则:如何写出搜索引擎喜爱的文章 【免费下载链接】search-engine-optimization 🔍 A helpful checklist/collection of Search Engine Optimization (SEO) tips and techniques. 项目地址: https://gitcode.co…...

3分钟解锁B站缓存视频:m4s-converter让你真正拥有数字收藏

3分钟解锁B站缓存视频:m4s-converter让你真正拥有数字收藏 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾在B站缓存了珍贵的…...

抖音下载器:告别录屏时代,3步打造你的专属内容库

抖音下载器:告别录屏时代,3步打造你的专属内容库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

30秒React实用工具函数大全:10个必备开发技巧

30秒React实用工具函数大全:10个必备开发技巧 【免费下载链接】30-seconds-of-react Short React code snippets for all your development needs 项目地址: https://gitcode.com/gh_mirrors/30/30-seconds-of-react 30-seconds-of-react是一个专注于提供简短…...

React组件生命周期终极指南:30-seconds-of-react中useEffect的进阶用法

React组件生命周期终极指南:30-seconds-of-react中useEffect的进阶用法 【免费下载链接】30-seconds-of-react Short React code snippets for all your development needs 项目地址: https://gitcode.com/gh_mirrors/30/30-seconds-of-react 掌握React组件生…...

Filament Shield 策略生成器:自动化权限策略开发完全指南

Filament Shield 策略生成器:自动化权限策略开发完全指南 【免费下载链接】filament-shield The easiest and most intuitive way to add access management to your Filament Panel; Resources, Pages & Widgets through spatie/laravel-permission 项目地址…...

Browsershot完整指南:掌握网页截图与PDF生成的核心方法

Browsershot完整指南:掌握网页截图与PDF生成的核心方法 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot Browsershot是一款强大的工具,能够轻松实现HTML到图片、…...

Outlook邮箱爆满无法接收邮件怎么办?一篇文章教你用“归档”快速释放空间

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

机器视觉框架源码(最新版本)- VS2019直接编译、支持多种视觉检测与机器人控制

机器视觉框架源码,最新版本 到手vs2019可以直接编译、 视觉检测、AOI视觉检测、机械手定位、点胶机、插件机、激光切割机、视觉螺丝机、视觉贴合机、激光焊接机、视觉裁板机……, C#联合Halcon混合编程源码,插件式开发 ,带手眼标定…...

C++的std--ranges算法并行执

C的std::ranges算法并行执行:现代C的高效之道 随着现代计算机多核处理器的普及,并行计算已成为提升程序性能的关键手段。C20引入的std::ranges库不仅简化了范围操作,还通过与执行策略结合,为开发者提供了高效的并行计算能力。本文…...

三大平台智能抢票系统:从技术小白到抢票高手的自动化解决方案

三大平台智能抢票系统:从技术小白到抢票高手的自动化解决方案 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 在数字化票务时代&a…...

ElementPlus主题定制实战:从零到一打造个性化UI风格

1. 为什么需要定制ElementPlus主题? 在实际项目开发中,我们经常会遇到这样的场景:UI设计师给出一套全新的配色方案,要求将ElementPlus默认的蓝色主题替换成项目专属的配色。这时候很多新手开发者可能会直接通过CSS样式覆盖的方式修…...

告别复制粘贴!用Vue CLI插件一键集成Cesium到Vue2老项目

告别复制粘贴!用Vue CLI插件一键集成Cesium到Vue2老项目 在Vue2项目中引入Cesium进行3D地理可视化开发时,传统的手动集成方式往往需要处理复杂的Webpack配置、静态资源管理和全局变量注入。这种"复制粘贴"式的集成不仅效率低下,还容…...

终极Windows优化指南:用Win11Debloat一键告别系统卡顿和隐私泄露

终极Windows优化指南:用Win11Debloat一键告别系统卡顿和隐私泄露 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…...

Unity PBR实战:手把手教你用Standard Shader调出真实金属与塑料质感

Unity PBR实战:用Standard Shader打造真实材质效果指南 当你在Unity中打开Standard Shader时,是否曾被那一长串参数列表弄得不知所措?Albedo、Metallic、Smoothness这些看似简单的滑块,实际上隐藏着将普通3D模型转化为逼真场景的关…...

【深度解析】硬中断与软中断:从硬件信号到软件调度的核心机制

1. 硬中断:硬件与CPU的紧急通话 想象一下你正在专心写代码,突然有人拍你肩膀说有紧急电话。这时候你必须立即保存当前工作状态,去接这个电话——这就是硬中断的生动比喻。硬中断本质上就是外部设备(比如网卡、硬盘、键盘&#xff…...

TrollInstallerX:iOS系统安装自动化解决方案(智能漏洞利用与全版本兼容)

TrollInstallerX:iOS系统安装自动化解决方案(智能漏洞利用与全版本兼容) 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 副标题&…...

容器启动失败?.NET 9 配置绑定失效全排查,从 Program.cs 到 docker-compose.yml 的12个断点检查清单

第一章:容器启动失败的典型现象与诊断原则容器启动失败是运维和开发过程中高频出现的问题,其表象多样但根源往往集中于配置、依赖或运行时环境。常见现象包括:容器瞬间退出(Exited (1))、持续重启(Restarti…...

UI For Docker完整贡献指南:10个步骤成为开源社区达人

UI For Docker完整贡献指南:10个步骤成为开源社区达人 【免费下载链接】ui-for-docker A web interface for Docker, formerly known as DockerUI. This repo is not maintained 项目地址: https://gitcode.com/gh_mirrors/ui/ui-for-docker UI For Docker是…...

Browsershot大数据处理终极指南:海量网页截图存储与分析完整方案

Browsershot大数据处理终极指南:海量网页截图存储与分析完整方案 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot 在当今数据驱动的时代,网页截图工具Browsersh…...

4步实现AnyLogic-Pypeline集成:构建跨语言仿真系统的实战指南

4步实现AnyLogic-Pypeline集成:构建跨语言仿真系统的实战指南 【免费下载链接】AnyLogic-Pypeline A custom AnyLogic library for running Python inside an AnyLogic model (Java) 项目地址: https://gitcode.com/gh_mirrors/an/AnyLogic-Pypeline AnyLogi…...

QMCDecode:破解音乐加密枷锁,重获数字音频自由

QMCDecode:破解音乐加密枷锁,重获数字音频自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默…...

从碎片到可信:OpenClaw的任务治理之路

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...