mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-03-30 04:25:09 +00:00
feat: decouple billing correctness from usage log batching
This commit is contained in:
13
backend/migrations/071_add_usage_billing_dedup.sql
Normal file
13
backend/migrations/071_add_usage_billing_dedup.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
-- 窄表账务幂等键:将“是否已扣费”从 usage_logs 解耦出来
|
||||
-- 幂等执行:可重复运行
|
||||
|
||||
CREATE TABLE IF NOT EXISTS usage_billing_dedup (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
request_id VARCHAR(255) NOT NULL,
|
||||
api_key_id BIGINT NOT NULL,
|
||||
request_fingerprint VARCHAR(64) NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_usage_billing_dedup_request_api_key
|
||||
ON usage_billing_dedup (request_id, api_key_id);
|
||||
@@ -0,0 +1,7 @@
|
||||
-- usage_billing_dedup 是按时间追加写入的幂等窄表。
|
||||
-- 使用 BRIN 支撑按 created_at 的批量保留期清理,尽量降低写放大。
|
||||
-- 使用 CONCURRENTLY 避免在热表上长时间阻塞写入。
|
||||
|
||||
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_usage_billing_dedup_created_at_brin
|
||||
ON usage_billing_dedup
|
||||
USING BRIN (created_at);
|
||||
10
backend/migrations/073_add_usage_billing_dedup_archive.sql
Normal file
10
backend/migrations/073_add_usage_billing_dedup_archive.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- 冷归档旧账务幂等键,缩小热表索引与清理范围,同时不丢失长期去重能力。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS usage_billing_dedup_archive (
|
||||
request_id VARCHAR(255) NOT NULL,
|
||||
api_key_id BIGINT NOT NULL,
|
||||
request_fingerprint VARCHAR(64) NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL,
|
||||
archived_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
PRIMARY KEY (request_id, api_key_id)
|
||||
);
|
||||
Reference in New Issue
Block a user