component-kv设计与实现
一、背景
在软件开发过程中有很多配置和一些字典数据需要进行管理,大多数处理方案都显得比较定制化,有些配置来源于数据库,有些就写在代码里,比较散乱,同时对于一些复杂的树形结构等也无法抽象一个通用的数据结构进行简化。因此需要一个相对通用的简单方案来管理这些kv类数据。
这个组件是接着这篇文章《用一个极致简单的场景演练领域建模》进行设计的,根据不同业务场景实现不同的业务场景Service能力。从组件的应用架构图上看,麻雀虽小,五脏俱全。这个组件可以方便的进行集成和二次开发,基本可以作为组件小而美的典型。
二、需求
2.1 KV 场景支持
- 支持简单KV类模型
- 支持三元组模型
- 支持按某一维度分组
- 支持存在父子级关心的数据kv模型
- 支持作为某个数据表记录的扩展字段
- 支持value是JSON字符串和JSON对象的能力
2.2 读写数据源场景支持
- 优先支持数据库存储
- KVService CURD场景支持
- 从远程服务中读写配置(redis,remote config)需要二次开发
- 从本地读取配置(properties,enum)需要二次开发
2.3 组件交付内容
- 组件KV模型
- 组件持久化DAO和Mapper
- 组件DDL脚本
- 组件统一服务接口
三、技术设计&实现
3.1 组件应用架构图
从上面看主要分为五层,看着非常简单但是也有一点点技术含量.
统一API层 : 屏蔽KV内部场景服务的差异方便接入和集成
场景层:主要描述支持哪些场景
模型层: 根据不同场景来构建不同的KVPair对象,外部统一由KVPairBO做业务对象引用和操作
能力服务层:上面四个服务是针对不同场景做的个性化服务方法逻辑
下面四个服务是针对于不同的KV数据来源做的适配性服务方法逻辑,目前只实现了支持DB读写相关的逻辑
其他的可以按自己的场景分别实现即可接入。持久层:为了方便用户接入和使用,这里做了持久层模型和接口相关的支持。
3.2 组件模块简介
- kv-component
kv组件的核心模块,kv模型和service都在这里维护
- kv-component-web
kv组件的springboot服务,二次开发可以通过spring-controller来测试二次开发的逻辑。
3.3 KV模型和KVApi接口
四、总结
4.1 优缺点
优点:支持所有kv场景的数据管理
缺点: 不能大规模的管理KV数据,比如非常复杂的JSON,非常多的分组情况,这样可能会引起混乱,容易耦合
4.2 更多场景支持
- 多对多引用,把关系作为一方的扩展字段
- 一对多引用,把关系作为一方的扩展字段
一方或者另外一方对多方的引用可以按分组和对象扩展引用的方式进行管理
- 聚合对象的快照存储
- 树形结构的快照存储
component-kv设计与实现相关推荐
- SAP Spartacus Unit List Component的设计明细 - UnitListComponent
Unit list Component 源代码: 这个service是依赖注入的: this.service指向unit list specific service class: 在这个specifi ...
- SAP Spartacus B2B 页面的 Popup Component
we'll make the name a link to save space, no "Details" word user clicks name and sees popo ...
- SAP Spartacus Breadcrumbs Component的显示问题讨论
如果把Storefront.component.html里position为BottomHeaderSlot改成其他名称: 按照其注释写到: position是用于为指定的page slot定位CMS ...
- 特别引人注目的头像_设计样式指南:构建引人注目的产品的要素
特别引人注目的头像 If you look at companies like Dropbox, Google, and Twitter you'll notice that they each ha ...
- vue延迟渲染组件_性能优化之组件懒加载: Vue Lazy Component 介绍
这篇文章分享了从遇到前端业务性能问题,到分析.解决并且梳理出通用的Vue 2.x 组件级懒加载解决方案(Vue Lazy Component )的过程. 初始加载资源过多 问题起源于我们的一个页面,下 ...
- 基于可持久化内存-AEP的KV存储引擎
基于可持久化内存-AEP的KV存储引擎 一份简单的AEP上手指南 QuicklyStart 切换到测试程序目录 cd ../judge 通过judge程序对KV存储进行一些测试 ** -s :set ...
- 所向无前 正当年!掌上英雄联盟S10换肤设计小结
项目背景 掌盟作为官方APP,会在重要节点配合产品和运营侧进行换肤设计,渲染节点氛围,从而希望可以提升产品口碑,做一个有温度的APP. 在掌盟的换肤工作中,可以总结为3种换肤类型: S10换肤的工作就 ...
- python时钟程序的设计总结_python基于Kivy写一个图形桌面时钟程序
kivy 是一个开源的 python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 kivy 编写的程序可在 linux,windows,os x,android,ios 和 ra ...
- 【FPGA】Buffer专题介绍(二)
目录 背景 IBUF IBUFDS IBUFG IBUFGDS 背景 这篇博文是下面这篇博文的继续: [FPGA]Buffer专题介绍(一) 但介绍方式我想放的更自由一点,要不然就是官方文档了. IB ...
- java缓存怎么用_java开发应该如何缓存?
首先应该理解为什么需要缓存. 在计算机的组成中,关于存储这一块是分层设计的,访问速度从快到慢主要分为:CPU的L1缓存.CPU的L2缓存.CPU的L3缓存.主内存.SSD硬盘.机械硬盘. 其实一开始并 ...
最新文章
- 中国首场AI芯片产业峰会成功举办 GTIC 2018热度空前
- 两个奇技淫巧,将 Docker 镜像体积减小 99%
- equals的用法的注意事项
- sqlplus配置连接mysql_如何配置和使用iSQL*Plus
- 1708硬盘转接口_ICY DOCK全球首款U.2转USB转接器震撼上市
- 小记css的margin collapsing
- 在Linux中使用matplotlib进行科学画图
- LeetCode345. Reverse Vowels of a String
- java图书馆抢座系统_java毕业设计_springboot框架的图书馆座位预约占座
- 统计字符串中数字字符、英文字符、空格符的个数
- C# 电子发票生成pdf
- linux 分卷压缩及解压缩
- Go和Rust计算性能大比武
- 以CVPR顶会论文为例,探讨AI论文的阅读方法
- Air Jordan 33 Performance Review
- tbc新服务器消息,TBC最新消息泄露:将分为4个阶段,详细内容分析
- C#.NET程序设计教程实验指导(清华大学 江红,余青松)实验源码
- 【chrome插件】公众号后台,固定侧边栏,自动定位菜单位置。
- python运行界面如何缩小_如何使用Python调整图像大小
- 康耐视3D-DSMax图像采集详细操作流程
热门文章
- 【爱贝观察】移动支付风向转变:拓宽海外市场、渗透三四线城市
- 局域网服务器linux访问不了网,linux局域网不能相互访问
- QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。
- 海康威视工业相机MV-CE060-10UC使用指北
- 火影新忍出击steam服务器维修,《火影忍者博人传:新忍出击》游戏打不开报错解决方法...
- 博弈背景下的记忆化搜索/题意理解 (HDU 2452 Navy maneuvers)
- mysql权限系统的工作原理_Mysql权限系统工作原理_PHP教程
- 关于安装及使用python的人脸识别模块:face_recognition
- 高端电视选购调查:8成用户放弃OLED选择ULEDX
- 解决3ds Max在高分辨率屏幕下显示字体偏小的问题