负载均衡深度改造,增加分布式锁,表唯一约束等
This commit is contained in:
@@ -72,7 +72,8 @@ CREATE TABLE `tb_bot_document_collection`
|
||||
`bot_id` bigint UNSIGNED NULL DEFAULT NULL,
|
||||
`document_collection_id` bigint UNSIGNED NULL DEFAULT NULL,
|
||||
`options` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_bot_document_collection`(`bot_id`, `document_collection_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'bot绑定的知识库' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -120,7 +121,8 @@ CREATE TABLE `tb_bot_plugin`
|
||||
`bot_id` bigint UNSIGNED NULL DEFAULT NULL,
|
||||
`plugin_item_id` bigint UNSIGNED NULL DEFAULT NULL,
|
||||
`options` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_bot_plugin`(`bot_id`, `plugin_item_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'bot绑定的插件' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -134,7 +136,8 @@ CREATE TABLE `tb_bot_recently_used`
|
||||
`created` datetime(0) NOT NULL COMMENT '创建时间',
|
||||
`created_by` bigint(0) UNSIGNED NOT NULL COMMENT '创建者',
|
||||
`sort_no` int(0) NULL DEFAULT 0 COMMENT '排序',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_bot_recently_used`(`created_by`, `bot_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '最近使用' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -147,7 +150,8 @@ CREATE TABLE `tb_bot_workflow`
|
||||
`bot_id` bigint UNSIGNED NULL DEFAULT NULL,
|
||||
`workflow_id` bigint UNSIGNED NULL DEFAULT NULL,
|
||||
`options` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_bot_workflow`(`bot_id`, `workflow_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'bot绑定的工作流' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -704,7 +708,8 @@ CREATE TABLE `tb_sys_account_position`
|
||||
`id` bigint UNSIGNED NOT NULL COMMENT '主键',
|
||||
`account_id` bigint UNSIGNED NOT NULL COMMENT '用户ID',
|
||||
`position_id` bigint UNSIGNED NOT NULL COMMENT '职位ID',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_account_position`(`account_id`, `position_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户-职位表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -716,7 +721,8 @@ CREATE TABLE `tb_sys_account_role`
|
||||
`id` bigint UNSIGNED NOT NULL COMMENT '主键',
|
||||
`account_id` bigint UNSIGNED NOT NULL COMMENT '用户ID',
|
||||
`role_id` bigint UNSIGNED NOT NULL COMMENT '角色ID',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_account_role`(`account_id`, `role_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户-角色表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -733,7 +739,8 @@ CREATE TABLE `tb_sys_api_key`
|
||||
`tenant_id` bigint UNSIGNED NULL DEFAULT NULL COMMENT '租户id',
|
||||
`expired_at` datetime NULL DEFAULT NULL COMMENT '失效时间',
|
||||
`created_by` bigint UNSIGNED NULL DEFAULT NULL COMMENT '创建人',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_api_key`(`api_key`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'apikey表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -758,7 +765,8 @@ CREATE TABLE `tb_sys_api_key_resource_mapping`
|
||||
`id` bigint UNSIGNED NOT NULL COMMENT 'id',
|
||||
`api_key_id` bigint UNSIGNED NOT NULL COMMENT 'api_key_id',
|
||||
`api_key_resource_id` bigint UNSIGNED NOT NULL COMMENT '请求接口资源访问id',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_api_key_resource`(`api_key_id`, `api_key_resource_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'apikey-请求接口表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -924,7 +932,7 @@ CREATE TABLE `tb_sys_option`
|
||||
`tenant_id` bigint UNSIGNED NOT NULL COMMENT '租户ID',
|
||||
`key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置KEY',
|
||||
`value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '配置内容',
|
||||
INDEX `uni_key`(`tenant_id`, `key`) USING BTREE
|
||||
UNIQUE INDEX `uni_key`(`tenant_id`, `key`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统配置信息表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -980,7 +988,8 @@ CREATE TABLE `tb_sys_role_dept`
|
||||
`id` bigint UNSIGNED NOT NULL COMMENT '主键',
|
||||
`role_id` bigint UNSIGNED NOT NULL COMMENT '角色ID',
|
||||
`dept_id` bigint UNSIGNED NOT NULL COMMENT '部门ID',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_role_dept`(`role_id`, `dept_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '角色-部门表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -992,7 +1001,8 @@ CREATE TABLE `tb_sys_role_menu`
|
||||
`id` bigint UNSIGNED NOT NULL COMMENT '主键',
|
||||
`role_id` bigint UNSIGNED NOT NULL COMMENT '角色ID',
|
||||
`menu_id` bigint UNSIGNED NOT NULL COMMENT '菜单ID',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_role_menu`(`role_id`, `menu_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '角色-菜单表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
@@ -1140,7 +1150,8 @@ CREATE TABLE `tb_bot_mcp`
|
||||
`mcp_id` bigint(0) UNSIGNED NULL DEFAULT NULL COMMENT 'mcpId',
|
||||
`mcp_tool_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'mcp工具名称',
|
||||
`mcp_tool_description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'mcp工具描述',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uni_bot_mcp`(`bot_id`, `mcp_id`, `mcp_tool_name`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
SET
|
||||
|
||||
64
sql/03-easyflow-v2.p1-ha.sql
Normal file
64
sql/03-easyflow-v2.p1-ha.sql
Normal file
@@ -0,0 +1,64 @@
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- P1: 多机部署并发安全增强(唯一约束 + 去重)
|
||||
-- 注意:本脚本为增量脚本,建议仅执行一次。
|
||||
|
||||
-- 1) 清理 bot-knowledge 重复绑定
|
||||
DELETE t1
|
||||
FROM tb_bot_document_collection t1
|
||||
INNER JOIN tb_bot_document_collection t2
|
||||
ON t1.bot_id <=> t2.bot_id
|
||||
AND t1.document_collection_id <=> t2.document_collection_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
-- 2) 清理 bot-workflow 重复绑定
|
||||
DELETE t1
|
||||
FROM tb_bot_workflow t1
|
||||
INNER JOIN tb_bot_workflow t2
|
||||
ON t1.bot_id <=> t2.bot_id
|
||||
AND t1.workflow_id <=> t2.workflow_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
-- 3) 清理 bot-plugin 重复绑定
|
||||
DELETE t1
|
||||
FROM tb_bot_plugin t1
|
||||
INNER JOIN tb_bot_plugin t2
|
||||
ON t1.bot_id <=> t2.bot_id
|
||||
AND t1.plugin_item_id <=> t2.plugin_item_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
-- 4) 清理 bot-mcp 重复绑定
|
||||
DELETE t1
|
||||
FROM tb_bot_mcp t1
|
||||
INNER JOIN tb_bot_mcp t2
|
||||
ON t1.bot_id <=> t2.bot_id
|
||||
AND t1.mcp_id <=> t2.mcp_id
|
||||
AND t1.mcp_tool_name <=> t2.mcp_tool_name
|
||||
AND t1.id > t2.id;
|
||||
|
||||
-- 5) 清理最近使用重复记录
|
||||
DELETE t1
|
||||
FROM tb_bot_recently_used t1
|
||||
INNER JOIN tb_bot_recently_used t2
|
||||
ON t1.created_by = t2.created_by
|
||||
AND t1.bot_id = t2.bot_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
-- 增加唯一索引(并发写最终一致性兜底)
|
||||
ALTER TABLE tb_bot_document_collection
|
||||
ADD UNIQUE INDEX uni_bot_document_collection (bot_id, document_collection_id);
|
||||
|
||||
ALTER TABLE tb_bot_workflow
|
||||
ADD UNIQUE INDEX uni_bot_workflow (bot_id, workflow_id);
|
||||
|
||||
ALTER TABLE tb_bot_plugin
|
||||
ADD UNIQUE INDEX uni_bot_plugin (bot_id, plugin_item_id);
|
||||
|
||||
ALTER TABLE tb_bot_mcp
|
||||
ADD UNIQUE INDEX uni_bot_mcp (bot_id, mcp_id, mcp_tool_name);
|
||||
|
||||
ALTER TABLE tb_bot_recently_used
|
||||
ADD UNIQUE INDEX uni_bot_recently_used (created_by, bot_id);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
88
sql/04-easyflow-v2.p1-system-ha.sql
Normal file
88
sql/04-easyflow-v2.p1-system-ha.sql
Normal file
@@ -0,0 +1,88 @@
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- P1: 非 AI 核心模块并发安全增强(系统模块/数据关系模块)
|
||||
-- 说明:本脚本为一次性增量执行脚本。
|
||||
|
||||
-- 1) 关系表去重(按业务复合键保留最小 id)
|
||||
DELETE t1
|
||||
FROM tb_sys_account_position t1
|
||||
INNER JOIN tb_sys_account_position t2
|
||||
ON t1.account_id = t2.account_id
|
||||
AND t1.position_id = t2.position_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
DELETE t1
|
||||
FROM tb_sys_account_role t1
|
||||
INNER JOIN tb_sys_account_role t2
|
||||
ON t1.account_id = t2.account_id
|
||||
AND t1.role_id = t2.role_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
DELETE t1
|
||||
FROM tb_sys_role_menu t1
|
||||
INNER JOIN tb_sys_role_menu t2
|
||||
ON t1.role_id = t2.role_id
|
||||
AND t1.menu_id = t2.menu_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
DELETE t1
|
||||
FROM tb_sys_role_dept t1
|
||||
INNER JOIN tb_sys_role_dept t2
|
||||
ON t1.role_id = t2.role_id
|
||||
AND t1.dept_id = t2.dept_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
DELETE t1
|
||||
FROM tb_sys_api_key_resource_mapping t1
|
||||
INNER JOIN tb_sys_api_key_resource_mapping t2
|
||||
ON t1.api_key_id = t2.api_key_id
|
||||
AND t1.api_key_resource_id = t2.api_key_resource_id
|
||||
AND t1.id > t2.id;
|
||||
|
||||
DELETE t1
|
||||
FROM tb_sys_api_key t1
|
||||
INNER JOIN tb_sys_api_key t2
|
||||
ON t1.api_key = t2.api_key
|
||||
AND t1.id > t2.id
|
||||
WHERE t1.api_key IS NOT NULL;
|
||||
|
||||
-- 2) sys_option 去重(无主键表,采用临时表重建)
|
||||
DROP TABLE IF EXISTS tb_sys_option_tmp;
|
||||
CREATE TABLE tb_sys_option_tmp LIKE tb_sys_option;
|
||||
ALTER TABLE tb_sys_option_tmp DROP INDEX uni_key;
|
||||
INSERT INTO tb_sys_option_tmp (tenant_id, `key`, `value`)
|
||||
SELECT tenant_id, `key`, ANY_VALUE(`value`)
|
||||
FROM tb_sys_option
|
||||
GROUP BY tenant_id, `key`;
|
||||
DELETE
|
||||
FROM tb_sys_option;
|
||||
INSERT INTO tb_sys_option (tenant_id, `key`, `value`)
|
||||
SELECT tenant_id, `key`, `value`
|
||||
FROM tb_sys_option_tmp;
|
||||
DROP TABLE IF EXISTS tb_sys_option_tmp;
|
||||
|
||||
-- 3) 增加唯一约束(并发写兜底)
|
||||
ALTER TABLE tb_sys_account_position
|
||||
ADD UNIQUE INDEX uni_account_position (account_id, position_id);
|
||||
|
||||
ALTER TABLE tb_sys_account_role
|
||||
ADD UNIQUE INDEX uni_account_role (account_id, role_id);
|
||||
|
||||
ALTER TABLE tb_sys_role_menu
|
||||
ADD UNIQUE INDEX uni_role_menu (role_id, menu_id);
|
||||
|
||||
ALTER TABLE tb_sys_role_dept
|
||||
ADD UNIQUE INDEX uni_role_dept (role_id, dept_id);
|
||||
|
||||
ALTER TABLE tb_sys_api_key_resource_mapping
|
||||
ADD UNIQUE INDEX uni_api_key_resource (api_key_id, api_key_resource_id);
|
||||
|
||||
ALTER TABLE tb_sys_api_key
|
||||
ADD UNIQUE INDEX uni_api_key (api_key);
|
||||
|
||||
ALTER TABLE tb_sys_option
|
||||
DROP INDEX uni_key,
|
||||
ADD UNIQUE INDEX uni_key (tenant_id, `key`);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
Reference in New Issue
Block a user