在日常开发中,常常用到很多类似的数据及相同结构的表数据,在架构设计中,我们可以将这些数据可变或者不变的固定结构数据放到一张通用表中,做成类似数据字典形式,这样,开发中,直接使用这类数据,通过主要关键词或者键获取具体的value
1:各种下拉框,各种选择器
2:错误码,返回码,映射数据
3:通用key value结构的数据
1:数据库设计
-- 创建数据映射表 create table T_DATA ( t_data_id VARCHAR2(100) not null,--数据主键 t_data_name VARCHAR2(100) not null,--数据名称 t_create_time VARCHAR2(17) not null,--创建时间 t_creater VARCHAR2(17) not null,--创建人
t_memo VARCHAR2(100)--备注 ) alter table T_DICT add primary key (t_data_id) -- 创建数据字典映射表 create table T_DATA_DETEAL ( t_data_id VARCHAR2(100) not null, t_deteal_id VARCHAR2(100) not null, t_deteal_value VARCHAR2(100) not null, t_xh NUMBER(3), t_create_time VARCHAR2(17) not null,--创建时间 t_memo VARCHAR2(100)--备注 ) alter table T_DATA_DETEAL add constraint FKT_DATA_DETEAL foreign key (t_data_id) references T_DATA (t_data_id);
将此表做成功能,对这两张表进行增删查改的操作。即可保持对数据的约束与管理
2:如何管理并做成分布式应用
2.1 做成功能性,增删查改操作
2.2 对这两张表用二级缓存存储,并建立分布式缓存,让数据字典的信息存储到二级缓存中,当我们查询的时候,如何获取数据映射?
将数据映射等基础服务的类做成公共jar包,每个应用并做成接口等形式,在spring初始化的时候,让其自动初始化,我们调用,之间通过spring的IOC调用数据映射,各个应用同时连接公共缓存
这样,这样就可以同时获取缓存的信息。
如若:各个应用配置了不同的缓存前缀,也可以设计成每个应用单独的数据映射缓存,当应用取缓存的时候,首先从本地取,取不到,再去调用管理平台的数据应用查询数据库。
2.3如果各个系统之间使用的key定义规则都不一样的缓存,那各个数据映射是如何保持一致性?或者说 分布式是如何管理缓存的
使用消息推送或者订阅来管理缓存
1:当管理系统更改新增管理系统,那么就要触发推送服务,触发更新已经订阅或者注册的应用,通知这些应用,清理数据映射缓存
其实这个推送,我们可以做成公共的,可以推送任意的内容,如推送短信,推送提醒,等等,这其中涉及到客户端和服务端
2:修改推送
当系统发生修改,系统触发推送,查询注册该事件的 数据库表,获取应用列表,Q名为动态Q名,通过注册的进行组织,变成真实的Q,轮询的推送到各个服务
3:启动订阅
当应用启动,应用自动调用管理系统,并写入注册事件
具体代码实现…