Добавлено формирование title_book

This commit is contained in:
Book Pauk
2022-10-26 17:35:45 +07:00
parent 87369a00a2
commit 20bb9f925a
3 changed files with 47 additions and 30 deletions

View File

@@ -44,14 +44,14 @@ const stepBound = [
0,// jobStep = 1 0,// jobStep = 1
18,// jobStep = 2 18,// jobStep = 2
20,// jobStep = 3 20,// jobStep = 3
60,// jobStep = 4 50,// jobStep = 4
72,// jobStep = 5 62,// jobStep = 5
72,// jobStep = 6 62,// jobStep = 6
74,// jobStep = 7 64,// jobStep = 7
75,// jobStep = 8 65,// jobStep = 8
79,// jobStep = 9 69,// jobStep = 9
79,// jobStep = 10 69,// jobStep = 10
80,// jobStep = 11 70,// jobStep = 11
95,// jobStep = 12 95,// jobStep = 12
100,// jobStep = 13 100,// jobStep = 13
]; ];

View File

@@ -425,8 +425,8 @@ class DbCreator {
} else } else
break; break;
await utils.sleep(100);
if (config.lowMemoryMode) { if (config.lowMemoryMode) {
await utils.sleep(100);
utils.freeMemory(); utils.freeMemory();
await db.freeMemory(); await db.freeMemory();
} }
@@ -441,7 +441,7 @@ class DbCreator {
utils.freeMemory(); utils.freeMemory();
//сортировка серий //сортировка серий
callback({job: 'series sort', jobMessage: 'Сортировка серий', jobStep: 5, progress: 0}); callback({job: 'sort', jobMessage: 'Сортировка', jobStep: 5, progress: 0});
await utils.sleep(100); await utils.sleep(100);
seriesArr.sort((a, b) => a.value.localeCompare(b.value)); seriesArr.sort((a, b) => a.value.localeCompare(b.value));
await utils.sleep(100); await utils.sleep(100);
@@ -559,12 +559,12 @@ class DbCreator {
callback({job: 'optimization', jobMessage: 'Оптимизация', jobStep: 11, progress: 0}); callback({job: 'optimization', jobMessage: 'Оптимизация', jobStep: 11, progress: 0});
await this.optimizeTable('series', 'series_book', 'series', db, (p) => { await this.optimizeTable('series', 'series_book', 'series', db, (p) => {
if (p.progress) if (p.progress)
p.progress = 0.5*p.progress; p.progress = 0.2*p.progress;
callback(p); callback(p);
}); });
await this.optimizeTable('title', 'title_book', 'title', db, (p) => { await this.optimizeTable('title', 'title_book', 'title', db, (p) => {
if (p.progress) if (p.progress)
p.progress = 0.5*(1 + p.progress); p.progress = 0.2 + 0.8*p.progress;
callback(p); callback(p);
}); });
@@ -649,33 +649,47 @@ class DbCreator {
}); });
}; };
const rows = await db.select({table: from}); const rows = await db.select({table: from, count: true});
const fromLength = rows[0].count;
let idsLen = 0;
let chunk = [];
let processed = 0; let processed = 0;
for (const row of rows) {// eslint-disable-line while (1) {// eslint-disable-line
chunk.push(row); const chunk = await db.select({
idsLen += row.bookId.length; table: from,
processed++; where: `
let iter = @getItem('optimize');
if (!iter) {
iter = @all();
@setItem('optimize', iter);
}
if (idsLen > 20000) {//константа выяснена эмпирическим путем "память/скорость" const ids = new Set();
let id = iter.next();
while (!id.done) {
ids.add(id.value);
if (ids.size >= 20000)
break;
id = iter.next();
}
return ids;
`
});
if (chunk.length) {
await saveChunk(chunk); await saveChunk(chunk);
idsLen = 0; processed += chunk.length;
chunk = []; callback({progress: processed/fromLength});
} else
break;
callback({progress: processed/rows.length}); if (this.config.lowMemoryMode) {
await utils.sleep(10);
await utils.sleep(100);
utils.freeMemory(); utils.freeMemory();
await db.freeMemory(); await db.freeMemory();
} }
} }
if (chunk.length) {
await saveChunk(chunk);
chunk = null;
}
await db.delete({table: to, where: `@@flag('toDel')`}); await db.delete({table: to, where: `@@flag('toDel')`});
await db.close({table: to}); await db.close({table: to});

View File

@@ -194,11 +194,14 @@ class WebWorker {
}); });
//открываем почти все таблицы //открываем почти все таблицы
await db.openAll({exclude: ['author']}); await db.openAll({exclude: ['author', 'title_book']});
//откроем таблицу 'author' с бОльшим размером кеша блоков, для ускорения выборки //откроем таблицу 'author' с бОльшим размером кеша блоков, для ускорения выборки
await db.open({table: 'author', cacheSize: (config.dbCacheSize > 100 ? config.dbCacheSize : 100)}); await db.open({table: 'author', cacheSize: (config.dbCacheSize > 100 ? config.dbCacheSize : 100)});
if (!config.extendedSearch)
await db.open({table: 'title_book'});
this.dbSearcher = new DbSearcher(config, db); this.dbSearcher = new DbSearcher(config, db);
db.wwCache = {}; db.wwCache = {};