2025-11-08
LiteDB
00

目录

引言
Nuget 安装LiteDB包
数据模型设计
设备状态实体类
工业设备参数实体类
LiteDB 存储实现
数据库操作服务
使用示例
典型使用场景
性能与优化建议
结论

引言

在工业自动化和物联网(IoT)领域,高效、轻量且易于使用的数据存储解决方案至关重要。LiteDB 作为一个嵌入式的 NoSQL 文档数据库,非常适合存储工业设备的复杂参数和运行数据。本文将详细探讨如何使用 LiteDB 进行工业设备参数的存储和管理。

Nuget 安装LiteDB包

PowerShell
`Install-Package LiteDB`

image.png

数据模型设计

设备状态实体类

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace App06 { /// <summary> /// 设备状态类 /// </summary> public class DeviceStatus { /// <summary> /// 是否在线 /// </summary> public bool IsOnline { get; set; } /// <summary> /// 运行温度 /// </summary> public double Temperature { get; set; } /// <summary> /// 运行负载 /// </summary> public double LoadPercentage { get; set; } /// <summary> /// 错误代码 /// </summary> public string ErrorCode { get; set; } } }

工业设备参数实体类

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LiteDB; using static System.Runtime.InteropServices.JavaScript.JSType; namespace App06 { /// <summary> /// 工业设备参数实体类 /// </summary> public class DeviceParameter { [BsonId] public ObjectId Id { get; set; } /// <summary> /// 设备唯一标识符 /// </summary> public string DeviceId { get; set; } /// <summary> /// 设备名称 /// </summary> public string DeviceName { get; set; } /// <summary> /// 设备类型 /// </summary> public string DeviceType { get; set; } /// <summary> /// 配置参数集合 /// </summary> public Dictionary<string, object> ConfigParameters { get; set; } /// <summary> /// 运行状态参数 /// </summary> public DeviceStatus Status { get; set; } /// <summary> /// 最后更新时间 /// </summary> public DateTime LastUpdateTime { get; set; } } }

LiteDB 存储实现

数据库操作服务

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LiteDB; namespace App06 { /// <summary> /// 工业设备参数存储服务 /// </summary> public class DeviceParameterService : IDisposable { private readonly LiteDatabase _database; private readonly ILiteCollection<DeviceParameter> _collection; /// <summary> /// 构造函数 /// </summary> /// <param name="databasePath">数据库文件路径</param> public DeviceParameterService(string databasePath) { _database = new LiteDatabase(databasePath); _collection = _database.GetCollection<DeviceParameter>("device_parameters"); // 创建索引以提高查询性能 _collection.EnsureIndex(x => x.DeviceId); _collection.EnsureIndex(x => x.DeviceName); } /// <summary> /// 添加或更新设备参数 /// </summary> /// <param name="deviceParameter">设备参数实体</param> public void AddOrUpdateDevice(DeviceParameter deviceParameter) { deviceParameter.LastUpdateTime = DateTime.Now; _collection.Upsert(deviceParameter); } /// <summary> /// 根据设备ID获取设备参数 /// </summary> /// <param name="deviceId">设备ID</param> /// <returns>设备参数实体</returns> public DeviceParameter GetDeviceById(string deviceId) { return _collection.FindOne(x => x.DeviceId == deviceId); } /// <summary> /// 获取特定类型的所有设备 /// </summary> /// <param name="deviceType">设备类型</param> /// <returns>设备参数列表</returns> public List<DeviceParameter> GetDevicesByType(string deviceType) { return _collection.Find(x => x.DeviceType == deviceType).ToList(); } /// <summary> /// 删除设备参数 /// </summary> /// <param name="deviceId">设备ID</param> public void DeleteDevice(string deviceId) { _collection.DeleteMany(x => x.DeviceId == deviceId); } /// <summary> /// 关闭数据库连接 /// </summary> public void Dispose() { _database?.Dispose(); } } }

使用示例

典型使用场景

C#
namespace App06 { internal class Program { static void Main(string[] args) { // 初始化数据库服务 using var deviceService = new DeviceParameterService("industrial_devices.db"); // 创建设备参数 var plcDevice = new DeviceParameter { DeviceId = "PLC_001", DeviceName = "主生产线控制器", DeviceType = "PLC", ConfigParameters = new Dictionary<string, object> { { "ScanCycle", 50 }, { "MemorySize", 256 }, { "CommunicationProtocol", "Modbus" } }, Status = new DeviceStatus { IsOnline = true, Temperature = 45.5, LoadPercentage = 65.3, ErrorCode = null } }; // 存储设备参数 deviceService.AddOrUpdateDevice(plcDevice); // 查询设备 var retrievedDevice = deviceService.GetDeviceById("PLC_001"); Console.WriteLine($"设备名称: {retrievedDevice.DeviceName}"); Console.WriteLine($"设备状态: {retrievedDevice.Status.IsOnline}"); Console.ReadKey(); } } }

image.png

image.png

性能与优化建议

  1. 使用索引提高查询性能
  2. 定期备份数据库文件
  3. 对于大规模数据,考虑分页和增量加载
  4. 使用 ConfigParameters 的字典类型实现灵活的参数存储

结论

LiteDB 为工业设备参数存储提供了一个轻量、高效且灵活的解决方案。通过合理的数据模型设计和优化,可以轻松实现复杂工业设备参数的管理。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!