模型持久化介绍
- 持久化分为模型的持久化 和字段的持久化两部分内容
- 字段持久化:这个操作是在模型持久化的基础上的二次优化,目的是为了将弹性字段转换为实体字段。弹性模型中的所有弹性字段也是存在于同一个json字段中,在字段过滤的时候,相比较直接某个实体字段过滤,从json中取字段过滤的执行效率低很多。所以我们在做模型持久化的同时,也可以考虑将一些常用字段(常用语过滤,关联,或者本身是业务主键)做字段持久化。参考优化方式一:映射实体字段
- 模型持久化:由于我们所有的弹性模型的数据都是统一的存在于一张表中,如果创建新建的业务模型预计数据量较大(私有云预计几十万)可考虑使用持久化,这种方式可以将新的业务模型单独在数据库中创建一张表,其操作效率会大大增加。
操作前注意事项:
❗️❗️❗️❗️❗️公有云禁止使用这种优化方式❗️❗️❗️❗️❗️
支持持久化的模型类型: 标准弹性模型/月份标准业务弹性模型
- 操作时注意区分模型名和表名( 表名为数据库中的定义)
持久化字段要全部小写,不能出现大写字母
已经映射过实体字段的弹性字段,不需要做持久化
- 模型持久化完成之后可以通过根据过滤字段关联字段创建相关索引优化速度
操作步骤
- 请确保操作前已经阅读前5条操作前注意事项再开始!
修改弹性模型属性(表名需要保证当前数据库的唯一性),分为新增弹性模型和修改已有数据的模型两种情况
新增弹性模型或者月份弹性模型时,附加信息写入{"persistence_table": "表名"}
- 已有数据的历史月份弹性模型(月份弹性模型指弹性模型中标准带有月份字段)需修改model层元数据配置{"persistence_table": "表名"}
已有数据的历史标准弹性模型调用接口hcm.db.flex.model.edit,传入以下参数并执行
{ "model": null, "id_": "模型名", "info": { "company_id": 公司id, "name": "模型名", "id": "模型名", "persistence_table": "表名" } }
进入页面,对字段进行持久化(将弹性字段直接转为实体字段),如果暂时没有关键字段(比如关联字段/查询字段/排序字段)需要持久化,可以忽略这一步
字段处理界面
common_model_list?filter_dict=%7B"model_name":"模型名"%7D&meta_state=solid&base_object_str=hcm.db.field.solid
注意❗️❗️❗️❗️❗️:
在持久化字段之前,需要检查字段类型是否正确,常见错误有
a. 月份和年份字段不能设置为日期或者时间类型,需要设置成字符
b. 整数类型和浮点数类型都设置成对应的类型,不要设置成字符
重启后端服务
执行接口
db.adjust.persistence.table, 该接口无参数
执行数据迁移接口(在当前弹性模型已有数据的情况下需要执行该接口,无数据可忽略)
hcm.db.flex.field.persist.table.migrate
- 当前数据量小(10万以下)可以执行迁移,接口参数:{"model_name": "模型名"}
- 数据量大的情况,接口参数{"model_name": "模型名“, “only_sql": true},将返回的sql内容发给部署老师,由部署老师直接在数据库内执行迁移
补充说明
- 如果模型已经操作过持久化了,还需要新增字段,非必要字段依然可以直接用新增弹性字段的方式处理,如果是关键字段(比如关联字段/查询字段/排序字段)则需要专门对字段做一下持久化,这种情况只需要重复上述2,3,4步骤即可
针对实体化完成后的模型,修改或新增模型插件时会有校验,需要做单独处理后才能进行模型插件的修改或新增
模型插件处理界面common_model_list?model=HCMVirtualPlugins&filter_dict=%7B"model_name":"模型名称"%7D&meta_state=solid