| 12345678910111213141516171819202122232425262728293031 |
- -- Migration 018: 分组-Key 号池(一对多关系)
- -- 一个分组可以有多个key,形成号池
- SET search_path TO crawl;
- -- 分组-Key关联表
- CREATE TABLE IF NOT EXISTS group_keys (
- id BIGSERIAL PRIMARY KEY,
- group_id BIGINT NOT NULL REFERENCES model_groups(id) ON DELETE CASCADE,
- api_key_id BIGINT NOT NULL REFERENCES api_keys(id) ON DELETE CASCADE,
- priority INT NOT NULL DEFAULT 0, -- 优先级(越大越高)
- weight INT NOT NULL DEFAULT 1, -- 权重(负载均衡用)
- is_active BOOLEAN NOT NULL DEFAULT TRUE, -- 是否启用
- status VARCHAR(20) NOT NULL DEFAULT 'active', -- active/rate_limited/banned/failed
- status_msg TEXT, -- 状态说明
- last_used_at TIMESTAMPTZ, -- 最后使用时间
- total_tokens BIGINT NOT NULL DEFAULT 0, -- 该key在该分组下使用的token总数
- request_count BIGINT NOT NULL DEFAULT 0, -- 请求次数
- error_count BIGINT NOT NULL DEFAULT 0, -- 错误次数
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
- UNIQUE(group_id, api_key_id) -- 同一分组不能重复添加同一个key
- );
- CREATE INDEX IF NOT EXISTS idx_group_keys_group ON group_keys(group_id);
- CREATE INDEX IF NOT EXISTS idx_group_keys_key ON group_keys(api_key_id);
- CREATE INDEX IF NOT EXISTS idx_group_keys_status ON group_keys(status);
- COMMENT ON TABLE group_keys IS '分组-Key号池关系表,一个分组可以有多个key';
- COMMENT ON COLUMN group_keys.priority IS '优先级,数值越大越优先使用';
- COMMENT ON COLUMN group_keys.weight IS '权重,用于加权负载均衡';
- COMMENT ON COLUMN group_keys.status IS '状态: active=正常, rate_limited=限流, banned=禁用, failed=失败';
|