单个数据库文件大于500兆时,裁剪文件,避免服务无法启动

This commit is contained in:
whyour 2021-11-11 22:41:12 +08:00
parent 50dd235e39
commit 9936097086

View File

@ -1,6 +1,7 @@
import DataStore from 'nedb'; import DataStore from 'nedb';
import config from '../config'; import config from '../config';
import Logger from './logger'; import Logger from './logger';
import fs from 'fs';
interface Dbs { interface Dbs {
cronDb: DataStore; cronDb: DataStore;
@ -12,37 +13,62 @@ interface Dbs {
const db: Dbs = {} as any; const db: Dbs = {} as any;
export default () => { async function truncateDb() {
db.cronDb = new DataStore({ filename: config.cronDbFile }); return new Promise((resolve) => {
db.dependenceDb = new DataStore({ filename: config.dependenceDbFile }); const files = [
db.envDb = new DataStore({ filename: config.envDbFile }); config.cronDbFile,
db.appDb = new DataStore({ filename: config.appDbFile }); config.dependenceDbFile,
db.authDb = new DataStore({ filename: config.authDbFile }); config.envDbFile,
config.appDbFile,
config.authDbFile,
];
// compaction data file for (const file of files) {
db.cronDb.persistence.compactDatafile(); if (fs.statSync(file).size >= 1024 * 1024 * 500) {
db.envDb.persistence.compactDatafile(); fs.truncateSync(file, 1024 * 1024 * 500);
db.dependenceDb.persistence.compactDatafile(); }
db.appDb.persistence.compactDatafile(); }
db.authDb.persistence.compactDatafile(); resolve(null);
});
}
export default async () => {
try {
await truncateDb();
db.cronDb.loadDatabase((err) => { db.cronDb = new DataStore({ filename: config.cronDbFile });
if (err) throw err; db.dependenceDb = new DataStore({ filename: config.dependenceDbFile });
}); db.envDb = new DataStore({ filename: config.envDbFile });
db.envDb.loadDatabase((err) => { db.appDb = new DataStore({ filename: config.appDbFile });
if (err) throw err; db.authDb = new DataStore({ filename: config.authDbFile });
});
db.dependenceDb.loadDatabase((err) => {
if (err) throw err;
});
db.appDb.loadDatabase((err) => {
if (err) throw err;
});
db.authDb.loadDatabase((err) => {
if (err) throw err;
});
Logger.info('✌️ DB loaded'); // compaction data file
db.cronDb.persistence.compactDatafile();
db.envDb.persistence.compactDatafile();
db.dependenceDb.persistence.compactDatafile();
db.appDb.persistence.compactDatafile();
db.authDb.persistence.compactDatafile();
db.cronDb.loadDatabase((err) => {
if (err) throw err;
});
db.envDb.loadDatabase((err) => {
if (err) throw err;
});
db.dependenceDb.loadDatabase((err) => {
if (err) throw err;
});
db.appDb.loadDatabase((err) => {
if (err) throw err;
});
db.authDb.loadDatabase((err) => {
if (err) throw err;
});
Logger.info('✌️ DB loaded');
} catch (error) {
Logger.info('✌️ DB load failed');
Logger.info(error);
}
}; };
export const dbs: Dbs = db; export const dbs: Dbs = db;