From 9b976ad402ed3b829b1db4a88d290d411f6c87e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=95=A3=E4=BB=99?= Date: Tue, 26 Nov 2024 02:29:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=95=B0=E6=8D=AE=E5=86=99?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++++++++++- main.js | 2 +- update.js | 15 +++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 79c0bb8..b7fcf39 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,17 @@ 导出接口 ```bash +# 安装依赖 npm install --registry=https://registry.npmmirror.com - node main.js + +# 连接数据库 +ssh -NCPf ai -L 3306:localhost:3306 ``` +```sql +-- 创建字段 +ALTER TABLE web_images ADD COLUMN day_rank INT UNSIGNED; +ALTER TABLE web_images ADD COLUMN week_rank INT UNSIGNED; +ALTER TABLE web_images ADD COLUMN month_rank INT UNSIGNED; +``` diff --git a/main.js b/main.js index 6e1cab8..0472538 100644 --- a/main.js +++ b/main.js @@ -50,7 +50,7 @@ export default function () { // 定时存档(每10分钟) setInterval(() => { archive('每10分钟自动存档...') - update('day_rank', Object.fromEntries(screenshots)) // 更新数据库中 day_rank 字段 + update('day_rank', Object.entries(Object.fromEntries(screenshots))) // 更新数据库中 day_rank 字段 }, 600000) // 实时读取日志文件 diff --git a/update.js b/update.js index 7b0e9d5..ee177d9 100644 --- a/update.js +++ b/update.js @@ -1,19 +1,22 @@ -import mysql from 'mysql2/promise' import fs from 'fs' +import mysql from 'mysql2/promise' -export async function update(list, field) { +export async function update(field, list) { const { mysql: config } = JSON.parse(fs.readFileSync('config.json', 'utf8')) const conn = await mysql.createConnection(config) - await conn.query(`CREATE TEMPORARY TABLE temp_updates (id INT PRIMARY KEY, ${field} INT)`) + console.log('创建临时表') + await conn.query(`CREATE TEMPORARY TABLE temp_updates (id INT PRIMARY KEY, ${mysql.escapeId(field)} INT UNSIGNED)`) + console.log(`数据总量 ${list.length} 条, 每次 10000 条写入 ${Math.ceil(list.length/10000)} 次`) for (let i = 0; i < list.length; i += 10000) { - const values = list.slice(i, i + 10000).map(({ id, ...rest }) => [id, rest[field]]) + console.log(`第 ${i/10000+1} 次写入`) + const values = list.slice(i, i + 10000) await conn.query(`INSERT INTO temp_updates (id, ${field}) VALUES ?`, [values]) } + console.log('更新数据从临时表转入生产库') await conn.query(`UPDATE web_images t JOIN temp_updates tu ON t.id = tu.id SET t.${field} = tu.${field}`) - console.log('更新完成') await conn.end() + console.log('更新完成') } -