新增 競賽建立、評審建立、團隊建立
This commit is contained in:
@@ -15,17 +15,17 @@ const dbConfig = {
|
||||
database: process.env.DB_NAME || 'db_AI_Platform',
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00',
|
||||
acquireTimeout: 60000,
|
||||
timeout: 60000,
|
||||
acquireTimeout: 10000, // 10秒獲取連接超時
|
||||
timeout: 10000, // 10秒查詢超時
|
||||
reconnect: true,
|
||||
connectionLimit: 10,
|
||||
queueLimit: 0,
|
||||
connectionLimit: 5, // 減少連接數,避免 Too many connections
|
||||
queueLimit: 10, // 允許排隊,避免立即失敗
|
||||
// 添加連接重試和錯誤處理配置
|
||||
retryDelay: 2000,
|
||||
maxRetries: 3,
|
||||
// 添加連接池配置
|
||||
idleTimeout: 300000,
|
||||
maxIdle: 10,
|
||||
idleTimeout: 60000, // 1分鐘空閒超時,快速釋放連接
|
||||
maxIdle: 5, // 最大空閒連接數
|
||||
// 添加 SSL 配置(如果需要)
|
||||
ssl: false as any,
|
||||
};
|
||||
@@ -41,7 +41,9 @@ export class Database {
|
||||
|
||||
private constructor() {
|
||||
this.pool = pool;
|
||||
this.useFailover = process.env.DB_FAILOVER_ENABLED === 'true';
|
||||
// 強制啟用備援功能,確保系統穩定性
|
||||
this.useFailover = true;
|
||||
console.log('🔄 資料庫備援功能已啟用');
|
||||
}
|
||||
|
||||
public static getInstance(): Database {
|
||||
@@ -124,15 +126,13 @@ export class Database {
|
||||
if (syncStatus.enabled) {
|
||||
const result = await dbSync.dualInsert(sql, params);
|
||||
if (result.success) {
|
||||
// 返回主機的結果(如果主機成功)
|
||||
if (result.masterSuccess) {
|
||||
return await dbFailover.insert(sql, params);
|
||||
} else if (result.slaveSuccess) {
|
||||
// 如果只有備機成功,返回備機結果
|
||||
return await dbFailover.insert(sql, params);
|
||||
}
|
||||
// 雙寫成功,直接返回成功結果
|
||||
// 不需要重新執行查詢,因為雙寫已經完成
|
||||
return { insertId: 0, affectedRows: 1 } as mysql.ResultSetHeader;
|
||||
} else {
|
||||
// 雙寫失敗,拋出錯誤
|
||||
throw new Error(`雙寫失敗: 主機${result.masterError || '成功'}, 備機${result.slaveError || '成功'}`);
|
||||
}
|
||||
throw new Error(`雙寫失敗: 主機${result.masterError || '成功'}, 備機${result.slaveError || '成功'}`);
|
||||
} else {
|
||||
return await dbFailover.insert(sql, params);
|
||||
}
|
||||
@@ -155,15 +155,13 @@ export class Database {
|
||||
if (syncStatus.enabled) {
|
||||
const result = await dbSync.dualUpdate(sql, params);
|
||||
if (result.success) {
|
||||
// 返回主機的結果(如果主機成功)
|
||||
if (result.masterSuccess) {
|
||||
return await dbFailover.update(sql, params);
|
||||
} else if (result.slaveSuccess) {
|
||||
// 如果只有備機成功,返回備機結果
|
||||
return await dbFailover.update(sql, params);
|
||||
}
|
||||
// 雙寫成功,直接返回成功結果
|
||||
// 不需要重新執行查詢,因為雙寫已經完成
|
||||
return { insertId: 0, affectedRows: 1 } as mysql.ResultSetHeader;
|
||||
} else {
|
||||
// 雙寫失敗,拋出錯誤
|
||||
throw new Error(`雙寫失敗: 主機${result.masterError || '成功'}, 備機${result.slaveError || '成功'}`);
|
||||
}
|
||||
throw new Error(`雙寫失敗: 主機${result.masterError || '成功'}, 備機${result.slaveError || '成功'}`);
|
||||
} else {
|
||||
return await dbFailover.update(sql, params);
|
||||
}
|
||||
@@ -186,15 +184,13 @@ export class Database {
|
||||
if (syncStatus.enabled) {
|
||||
const result = await dbSync.dualDelete(sql, params);
|
||||
if (result.success) {
|
||||
// 返回主機的結果(如果主機成功)
|
||||
if (result.masterSuccess) {
|
||||
return await dbFailover.delete(sql, params);
|
||||
} else if (result.slaveSuccess) {
|
||||
// 如果只有備機成功,返回備機結果
|
||||
return await dbFailover.delete(sql, params);
|
||||
}
|
||||
// 雙寫成功,直接返回成功結果
|
||||
// 不需要重新執行查詢,因為雙寫已經完成
|
||||
return { insertId: 0, affectedRows: 1 } as mysql.ResultSetHeader;
|
||||
} else {
|
||||
// 雙寫失敗,拋出錯誤
|
||||
throw new Error(`雙寫失敗: 主機${result.masterError || '成功'}, 備機${result.slaveError || '成功'}`);
|
||||
}
|
||||
throw new Error(`雙寫失敗: 主機${result.masterError || '成功'}, 備機${result.slaveError || '成功'}`);
|
||||
} else {
|
||||
return await dbFailover.delete(sql, params);
|
||||
}
|
||||
|
Reference in New Issue
Block a user