1
0

create_token_usage_logs_table.sql 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. -- ====================================================================
  2. -- Token使用日志表迁移脚本 (用于访问频率限制)
  3. -- ====================================================================
  4. -- 版本: v1.0
  5. -- 创建日期: 2025-08-25
  6. -- 描述: 创建token_usage_logs表,用于记录令牌使用情况以支持访问频率限制功能
  7. -- ====================================================================
  8. -- ====================================================================
  9. -- MySQL 语法
  10. -- ====================================================================
  11. CREATE TABLE IF NOT EXISTS token_usage_logs (
  12. id INT AUTO_INCREMENT PRIMARY KEY,
  13. token_id INT NOT NULL COMMENT '令牌ID',
  14. created_at BIGINT NOT NULL COMMENT '创建时间戳',
  15. INDEX idx_token_created (token_id, created_at),
  16. INDEX idx_created (created_at)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Token使用日志表(用于访问频率限制)';
  18. -- ====================================================================
  19. -- PostgreSQL 语法 (如果使用PostgreSQL,取消下面注释)
  20. -- ====================================================================
  21. /*
  22. CREATE TABLE IF NOT EXISTS token_usage_logs (
  23. id SERIAL PRIMARY KEY,
  24. token_id INTEGER NOT NULL,
  25. created_at BIGINT NOT NULL
  26. );
  27. CREATE INDEX IF NOT EXISTS idx_token_usage_logs_token_created ON token_usage_logs(token_id, created_at);
  28. CREATE INDEX IF NOT EXISTS idx_token_usage_logs_created ON token_usage_logs(created_at);
  29. COMMENT ON TABLE token_usage_logs IS 'Token使用日志表(用于访问频率限制)';
  30. COMMENT ON COLUMN token_usage_logs.token_id IS '令牌ID';
  31. COMMENT ON COLUMN token_usage_logs.created_at IS '创建时间戳';
  32. */
  33. -- ====================================================================
  34. -- SQLite 语法 (如果使用SQLite,取消下面注释)
  35. -- ====================================================================
  36. /*
  37. CREATE TABLE IF NOT EXISTS token_usage_logs (
  38. id INTEGER PRIMARY KEY AUTOINCREMENT,
  39. token_id INTEGER NOT NULL,
  40. created_at INTEGER NOT NULL
  41. );
  42. CREATE INDEX IF NOT EXISTS idx_token_usage_logs_token_created ON token_usage_logs(token_id, created_at);
  43. CREATE INDEX IF NOT EXISTS idx_token_usage_logs_created ON token_usage_logs(created_at);
  44. */
  45. -- ====================================================================
  46. -- 清理旧数据的脚本 (可选,定期执行以减少存储空间)
  47. -- ====================================================================
  48. /*
  49. -- 删除30天前的记录 (建议设置定时任务执行)
  50. DELETE FROM token_usage_logs WHERE created_at < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));
  51. -- PostgreSQL版本
  52. -- DELETE FROM token_usage_logs WHERE created_at < EXTRACT(EPOCH FROM NOW() - INTERVAL '30 days');
  53. -- SQLite版本
  54. -- DELETE FROM token_usage_logs WHERE created_at < strftime('%s', 'now', '-30 days');
  55. */
  56. -- ====================================================================
  57. -- 使用说明
  58. -- ====================================================================
  59. /*
  60. 此表用于记录令牌的每次使用,支持访问频率限制功能:
  61. 1. 表结构:
  62. - id: 主键,自增
  63. - token_id: 令牌ID,关联tokens表
  64. - created_at: 创建时间戳
  65. 2. 索引:
  66. - idx_token_created: 复合索引,用于快速查询某个令牌在特定时间范围内的使用次数
  67. - idx_created: 时间索引,用于定期清理旧数据
  68. 3. 使用场景:
  69. - 分钟级限制:查询当前分钟内的记录数
  70. - 日级限制:查询当天内的记录数
  71. - 定期清理:删除过期记录以节省存储空间
  72. 4. 性能考虑:
  73. - 该表会频繁插入,但查询相对较少
  74. - 索引设计优化了查询性能
  75. - 建议定期清理旧数据
  76. */