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({ "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 });
|
||||||
|
|||||||
@ -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);
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user