const Times = require("../public/times"); const Init = require("./init"); class ClearDBData extends Init { constructor(coin) { const method = "clear" super(coin, method); } /** * 删除X小时前的sharesdb数据,hours必须大于24小时 * @param {Number} hours * @returns */ async clearSharesDB(hours) { if(hours < 24){ console.log(`sharesdb最多只能删除24小时之前的数据`); return } try { // 修正查询语句,去掉 'from' 和 'to' 字段的单引号 const query_sharesdb_table_sql = ` SELECT \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date <= NOW() - INTERVAL ? HOUR; `; // 获取需要删除的高度范围 const need_del_height = await this.sharesdb.exec(query_sharesdb_table_sql, [hours]); if (need_del_height.length === 0) { console.log(`${Date.now()}:${this.coin}暂无需要清理的shares detail`); return; } // 生成删除表的 SQL 语句 let delete_sql = `DROP TABLE IF EXISTS `; need_del_height.forEach((item) => { const { from, to } = item; const table = `${this.coin}_block_detail_${from}_${Number((to - 1).toFixed(0))}`; delete_sql += `${table}, `; }); delete_sql = delete_sql.slice(0, -2) + ";"; // 去掉最后的逗号并加上分号 // 执行删除表的 SQL 语句 await this.sharesdb.exec(delete_sql); } catch (err) { throw err; } } /** * 删除pooldb,只支持0时刻 * @param {*} start_time 开始时间 yyyy-MM-dd hh-mm-ss格式 例如"2024-11-11 00:00:00" * @param {*} end_time 同上 * @returns */ async clearPoolDB(start_time, end_time){ try{ const interval = 86400000 // 1天的毫秒数 const start_ts = new Date(start_time).valueOf() const end_ts = new Date(end_time).valueOf() const count = Number((end_ts - start_ts).toFixed(0)) / interval if (!Number.isInteger(count)){ console.log(`给定的${start_time}和${end_time}有误!`); return } let sql = `DROP TABLE IF EXISTS ` for(let i=0; i