本帖最后由 李晓波 于 2023-4-11 15:44 编辑
背景:修复由于移动目录导致的目录结构混乱。修复会统一把有问题的目录和素材按日期放到一个新建的目录下面。开始修复前,需要先停止业务。
一、nebula上建一个文件夹修复会把有问题的目录和素材统一移动到一个新的目录下面, 所以修复前需要先在nebula里面创建一个目录。 注意:根据实际目录使用情况来建目录
2、进入服务页面
3、点击左边菜单中的通用数据对象
5、切换到“配置数据”的tab页面 6、点击上图的中按钮 7、鼠标移动到第一行的右边,会自动出现修改按钮和添加子节点按钮,点击添加子节点按钮(文件的位置,请根据实际需求新建, 截图只是参考) 8、输入文件夹的名字,点击保存按钮,完成文件夹的新建 9、点击xx文件夹后面的原始数据按钮(新建完需要刷新一下才能看到code和id) 10、记录id和code的值,后面会使用 二、备份mongoDB中相关的表1、用mongodb客户端工具(Studio 3T for MongoDB)连接mongodb, 并找到hivedb数据库 2、备份hivedb里面的SH_D_ENTITYDATA和SH_TREE_GENERALDATA 三、检测问题目录1、用mongodb客户端工具(Studio 3T for MongoDB)连接mongodb, 并找到hivedb数据库 2、打开Open IntelliShell,执行如下的命令(执行所需时间根据现场的数据而定):
// 创建索引
db.SH_TREE_GENERALDATA.createIndex({"reId":1, "parentId":1, "site":1}, {name:"reId_parentId_site"});
db.SH_TREE_GENERALDATA.createIndex({"dataId":1, "code":1}, {name:"dataId_code"});
// 创建集合
db.createCollection("UN_RELATION_TREE");
db.UN_RELATION_TREE.createIndex({"createTime":1});
db.createCollection("CODE_NOT_EXIST_TREE");
db.CODE_NOT_EXIST_TREE.createIndex({"createTime":1});
// 检测问题目录
db.SH_TREE_GENERALDATA.find({ "reId": "424179c9fa0149a687046d9e66eccdf5", "parentId": { $ne: "0" }, "site": "S1" }).forEach(function(item) {
if (typeof(item.code) == "undefined") {
// code不存在
db.CODE_NOT_EXIST_TREE.insert(item);
} else {
var parentCode = item.code.substring(0,item.code.length-3);
var count = db.SH_TREE_GENERALDATA.count({"dataId": item.parentId, "code": parentCode});
if(count == 0) {
// 关联错误
db.UN_RELATION_TREE.insert(item);
}
}
});
四、修复数据工具的sobeypan地址如下: \\pan.sobey.com\软件版本\产品版本\产品模块\Hive\tools\TreeMoveRepair 1、从上面的地址下载工具,再上传工具TreeMoveRepair.rar到能访问数据库的Windows机器上 2、解压工具TreeMoveRepair,进入目录TreeMoveRepair中,编辑application.yml 3、修改对应的数据库ip和数据库名,保存,双击run.bat,启动工具 4、如上图显示,表示启动完成 5、浏览器中输入:http://工具所在的windows的ip/swagger-ui.html 若不能访问,看下服务启动的端口号,加上端口号再试,如下:
7、输入之前nebula上建的文件夹的id和code,点击“Try it out!” 8、如上图,表示接口调通, 并且在工具目录下回生成一个create_folder.js的脚本 9、打开repair接口,直接点“Try it out!” 10、如下图所示,表示接口执行完毕, 并且会生成一个repair.js的脚本 11、查看目录TreeMoveRepair下是否有repair.js和create_folder.js文件产生,没有说明有问题执行可能有问题, 请联系hivecore团队. 12、打开execute-cmd接口,直接点“Try it out!” 返回200表示已经自动执行脚本,并修复数据库中的数据
五、执行完成后重建索引1、记录entity_S1的总数 2、打开repair.js文件,搜索关键字“delete” 3、如果没有关键字“delete”或者只有少量delete关键字再或者现场因为特殊原因不能删除索引,可以不删除索引,即entity_S1重建索引(不勾选清除数据) 4、如果有关键字“delete”,entity_S1重建索引(勾选清除数据) 注意:清除数据方式重建索引,是把entity_S1的索引数据全部删除,然后重建,重建过程中还没有建出来的素材将无法检索,如果有remove信息但是又不勾选清除数据,那么可能导致索引里面垃圾数据产生,请根据实际情况选择 5、重建完成之后,核对之前记录的总数是否基本一致 6、重建完成后在终端上确认是否已经正确
-------本文转自HIVE组
|