1
This commit is contained in:
parent
490a9058b3
commit
46fd921b23
@ -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({ "server_id": 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索引 - 自动清理过期记录
|
||||
db.jimeng_free_generation_results.createIndex({
|
||||
@ -57,6 +59,12 @@ db.jimeng_free_generation_results.createIndex({
|
||||
"server_id": 1,
|
||||
"created_at": 1
|
||||
});
|
||||
|
||||
// 复合索引 - 用于查询已读取/未读取的结果
|
||||
db.jimeng_free_generation_results.createIndex({
|
||||
"is_read": 1,
|
||||
"created_at": 1
|
||||
});
|
||||
```
|
||||
|
||||
### 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({ "server_id": 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({ "server_id": 1, "created_at": 1 });
|
||||
db.jimeng_free_generation_results.createIndex({ "is_read": 1, "created_at": 1 });
|
||||
|
||||
print("创建服务器心跳表索引...");
|
||||
db.jimeng_servers.createIndex({ "server_id": 1 }, { unique: true });
|
||||
|
||||
@ -24,6 +24,11 @@ export interface IGenerationResult extends Document {
|
||||
// 时间管理
|
||||
created_at: number; // 创建时间戳(秒)
|
||||
expires_at: number; // 过期时间戳(用于自动清理,默认24小时后)
|
||||
|
||||
// 读取状态
|
||||
is_read: boolean; // 是否已被读取
|
||||
first_read_at?: number; // 首次读取时间戳(秒)
|
||||
read_count: number; // 读取次数
|
||||
}
|
||||
|
||||
const GenerationResultSchema: Schema = new Schema({
|
||||
@ -69,10 +74,24 @@ const GenerationResultSchema: Schema = new Schema({
|
||||
expires_at: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
is_read: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
first_read_at: {
|
||||
type: Number
|
||||
},
|
||||
read_count: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
}, {
|
||||
collection: 'jimeng_free_generation_results',
|
||||
timestamps: false // 使用自定义时间戳
|
||||
});
|
||||
|
||||
// 添加TTL索引,自动清理过期数据
|
||||
GenerationResultSchema.index({ expires_at: 1 }, { expireAfterSeconds: 0 });
|
||||
|
||||
export default mongoose.model<IGenerationResult>('GenerationResult', GenerationResultSchema);
|
||||
@ -147,7 +147,7 @@ export class DatabaseGenerationService {
|
||||
|
||||
/**
|
||||
* 查询任务结果
|
||||
* 从结果表查询,如果存在则返回并清理,否则查询任务状态
|
||||
* 从结果表查询,如果存在则返回结果并标记为已读取,依靠TTL自动清理过期数据
|
||||
*/
|
||||
async queryTaskResult(taskId: string): Promise<any> {
|
||||
try {
|
||||
@ -155,7 +155,24 @@ export class DatabaseGenerationService {
|
||||
const result = await GenerationResult.findOne({ task_id: taskId });
|
||||
|
||||
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 = {
|
||||
created: Math.floor(Date.now() / 1000),
|
||||
data: {
|
||||
@ -165,10 +182,7 @@ export class DatabaseGenerationService {
|
||||
}
|
||||
};
|
||||
|
||||
// 删除结果记录(一次性消费)
|
||||
await GenerationResult.deleteOne({ task_id: taskId });
|
||||
|
||||
logger.info(`Task result retrieved and cleaned: ${taskId}, status: ${result.status}`);
|
||||
logger.info(`Task result retrieved: ${taskId}, status: ${result.status}, read_count: ${updateData.read_count}`);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user