This commit is contained in:
jonathang4 2025-08-27 19:10:52 +08:00
parent 490a9058b3
commit 46fd921b23
3 changed files with 50 additions and 6 deletions

View File

@ -44,6 +44,8 @@ db.jimeng_free_generation_tasks.createIndex({
db.jimeng_free_generation_results.createIndex({ "task_id": 1 }, { unique: true }); db.jimeng_free_generation_results.createIndex({ "task_id": 1 }, { unique: true });
db.jimeng_free_generation_results.createIndex({ "server_id": 1 }); db.jimeng_free_generation_results.createIndex({ "server_id": 1 });
db.jimeng_free_generation_results.createIndex({ "created_at": 1 }); db.jimeng_free_generation_results.createIndex({ "created_at": 1 });
db.jimeng_free_generation_results.createIndex({ "is_read": 1 });
db.jimeng_free_generation_results.createIndex({ "first_read_at": 1 });
// TTL索引 - 自动清理过期记录 // TTL索引 - 自动清理过期记录
db.jimeng_free_generation_results.createIndex({ db.jimeng_free_generation_results.createIndex({
@ -57,6 +59,12 @@ db.jimeng_free_generation_results.createIndex({
"server_id": 1, "server_id": 1,
"created_at": 1 "created_at": 1
}); });
// 复合索引 - 用于查询已读取/未读取的结果
db.jimeng_free_generation_results.createIndex({
"is_read": 1,
"created_at": 1
});
``` ```
### 3. 服务器心跳表 (jimeng_servers) ### 3. 服务器心跳表 (jimeng_servers)
@ -97,8 +105,11 @@ print("创建生成结果表索引...");
db.jimeng_free_generation_results.createIndex({ "task_id": 1 }, { unique: true }); db.jimeng_free_generation_results.createIndex({ "task_id": 1 }, { unique: true });
db.jimeng_free_generation_results.createIndex({ "server_id": 1 }); db.jimeng_free_generation_results.createIndex({ "server_id": 1 });
db.jimeng_free_generation_results.createIndex({ "created_at": 1 }); db.jimeng_free_generation_results.createIndex({ "created_at": 1 });
db.jimeng_free_generation_results.createIndex({ "is_read": 1 });
db.jimeng_free_generation_results.createIndex({ "first_read_at": 1 });
db.jimeng_free_generation_results.createIndex({ "expires_at": 1 }, { expireAfterSeconds: 0 }); db.jimeng_free_generation_results.createIndex({ "expires_at": 1 }, { expireAfterSeconds: 0 });
db.jimeng_free_generation_results.createIndex({ "server_id": 1, "created_at": 1 }); db.jimeng_free_generation_results.createIndex({ "server_id": 1, "created_at": 1 });
db.jimeng_free_generation_results.createIndex({ "is_read": 1, "created_at": 1 });
print("创建服务器心跳表索引..."); print("创建服务器心跳表索引...");
db.jimeng_servers.createIndex({ "server_id": 1 }, { unique: true }); db.jimeng_servers.createIndex({ "server_id": 1 }, { unique: true });

View File

@ -24,6 +24,11 @@ export interface IGenerationResult extends Document {
// 时间管理 // 时间管理
created_at: number; // 创建时间戳(秒) created_at: number; // 创建时间戳(秒)
expires_at: number; // 过期时间戳用于自动清理默认24小时后 expires_at: number; // 过期时间戳用于自动清理默认24小时后
// 读取状态
is_read: boolean; // 是否已被读取
first_read_at?: number; // 首次读取时间戳(秒)
read_count: number; // 读取次数
} }
const GenerationResultSchema: Schema = new Schema({ const GenerationResultSchema: Schema = new Schema({
@ -69,10 +74,24 @@ const GenerationResultSchema: Schema = new Schema({
expires_at: { expires_at: {
type: Number, type: Number,
required: true required: true
},
is_read: {
type: Boolean,
default: false
},
first_read_at: {
type: Number
},
read_count: {
type: Number,
default: 0
} }
}, { }, {
collection: 'jimeng_free_generation_results', collection: 'jimeng_free_generation_results',
timestamps: false // 使用自定义时间戳 timestamps: false // 使用自定义时间戳
}); });
// 添加TTL索引自动清理过期数据
GenerationResultSchema.index({ expires_at: 1 }, { expireAfterSeconds: 0 });
export default mongoose.model<IGenerationResult>('GenerationResult', GenerationResultSchema); export default mongoose.model<IGenerationResult>('GenerationResult', GenerationResultSchema);

View File

@ -147,7 +147,7 @@ export class DatabaseGenerationService {
/** /**
* *
* * TTL自动清理过期数据
*/ */
async queryTaskResult(taskId: string): Promise<any> { async queryTaskResult(taskId: string): Promise<any> {
try { try {
@ -155,7 +155,24 @@ export class DatabaseGenerationService {
const result = await GenerationResult.findOne({ task_id: taskId }); const result = await GenerationResult.findOne({ task_id: taskId });
if (result) { if (result) {
// 找到结果,返回并清理 // 找到结果,标记为已读取
const currentTime = Math.floor(Date.now() / 1000);
const updateData: any = {
read_count: (result.read_count || 0) + 1
};
// 如果是首次读取,记录首次读取时间
if (!result.is_read) {
updateData.is_read = true;
updateData.first_read_at = currentTime;
}
// 更新读取状态
await GenerationResult.updateOne(
{ task_id: taskId },
{ $set: updateData }
);
const response = { const response = {
created: Math.floor(Date.now() / 1000), created: Math.floor(Date.now() / 1000),
data: { data: {
@ -165,10 +182,7 @@ export class DatabaseGenerationService {
} }
}; };
// 删除结果记录(一次性消费) logger.info(`Task result retrieved: ${taskId}, status: ${result.status}, read_count: ${updateData.read_count}`);
await GenerationResult.deleteOne({ task_id: taskId });
logger.info(`Task result retrieved and cleaned: ${taskId}, status: ${result.status}`);
return response; return response;
} }