「连载」边缘计算(二十九)03-11:边缘部分源码(源码分析篇)

(接上篇)

EdgeCore m atamanager

前面对EdgeCore组件的edged、devicetwin、edgehub、eventbus功能模块进行了分析,本节对EdgeCore组件的另一个功能模块metamanager进行剖析。metamanager作为EdgeCore中的edged模块与edgehub模块进行交互的桥梁,除了将edgehub的消息转发给edged,还对一些必要的数据通过SQLite进行缓存,在某种程度上实现了KubeEdge的offline mode。本节就对metamanager所涉及的SQLite数据库相关逻辑和业务逻辑进行剖析,metamanager数据库相关逻辑剖析,metamanager业务逻辑剖析。

metamanager 数据库相关逻辑剖析

metamanager的模块注册函数具体如下所示。

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/metamanager/module.go |
| //constant metamanager module name const ( MetaManagerModuleName = "metaManager" ) ... // Register register metamanager func Register() { dbm.RegisterModel(MetaManagerModuleName, new(dao.Meta)) core.Register(&metaManager{}) } |

注册函数Register()做了两件事。

  1. 在SQLite中的数据库中初始化metaManager表;

2)注册已经初始化的metamanager。

下面深入剖析 在SQLite中的数据库中初始化metaManager表相关内容。dbm.RegisterModel()定义具体如下所示。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/common/dbm/db.go |
| //RegisterModel registers the defined model in the orm if model is enabled func RegisterModel(moduleName string, m interface{}) { if isModuleEnabled(moduleName) { orm.RegisterModel(m) ... } else { ... } } |

RegisterModel()函数是对[GitHub.com/astaxie/beego/orm](https://GitHub.com/astaxie/beego/tree/develop/orm)的封装。

回到在SQLite中的数据库中初始化metaManager表,下面深入剖析metaManager表的具体定义dao.Meta。dao.Meta定义具体下所示。

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/metamanager/dao/meta.go |
| // Meta metadata object type Meta struct { // ID int64 `orm:"pk; auto; column(id)"` Key string `orm:"column(key); size(256); pk"` Type string `orm:"column(type); size(32)"` Value string `orm:"column(value); null; type(text)"` } |

metaManager表的具体定义包含Key、Type和Value三个字段,具体含义如下。

1) Key:meta的名字;

2) Type: meta对应的操作类型;

3) Value:具体的meta值;

与Meta Struct的定义在同一文件内,还有对metaManager表的一些操作定义,如SaveMeta、DeleteMetaByKey、UpdateMeta、InsertOrUpdate、UpdateMetaField、UpdateMetaFields、QueryMeta、QueryAllMeta。

未完待续......

相关推荐
zenRRan20 分钟前
Qwen2.5-VL Technical Report!!! 操作手机电脑、解析化学公式和乐谱、剪辑电影等,妥妥六边形战士 !...
人工智能
让我安静会28 分钟前
Obsidian·Copilot 插件配置(让AI根据Obsidian笔记内容进行对话)
人工智能·笔记·copilot
Allen_LVyingbo33 分钟前
Scrum方法论指导下的Deepseek R1医疗AI部署开发
人工智能·健康医疗·scrum
Watermelo6171 小时前
从DeepSeek大爆发看AI革命困局:大模型如何突破算力囚笼与信任危机?
人工智能·深度学习·神经网络·机器学习·ai·语言模型·自然语言处理
Donvink1 小时前
【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
人工智能·深度学习·语言模型·transformer
计算机软件程序设计1 小时前
深度学习在图像识别中的应用-以花卉分类系统为例
人工智能·深度学习·分类
Ainnle1 小时前
企业级RAG开源项目分享:Quivr、MaxKB、Dify、FastGPT、RagFlow
人工智能·开源
纠结哥_Shrek1 小时前
Oracle和Mysql的区别
数据库·mysql·oracle
小天努力学java2 小时前
AI赋能传统系统:Spring AI Alibaba如何用大模型重构机票预订系统?
人工智能·spring
Fuweizn2 小时前
在工业生产中,物料搬运环节至关重要,搬运机器人开启新篇章
人工智能·智能机器人·复合机器人