Добавлено формирование 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
18,// jobStep = 2
20,// jobStep = 3
60,// jobStep = 4
72,// jobStep = 5
72,// jobStep = 6
74,// jobStep = 7
75,// jobStep = 8
79,// jobStep = 9
79,// jobStep = 10
80,// jobStep = 11
50,// jobStep = 4
62,// jobStep = 5
62,// jobStep = 6
64,// jobStep = 7
65,// jobStep = 8
69,// jobStep = 9
69,// jobStep = 10
70,// jobStep = 11
95,// jobStep = 12
100,// jobStep = 13
];

View File

@@ -425,8 +425,8 @@ class DbCreator {
} else
break;
await utils.sleep(100);
if (config.lowMemoryMode) {
await utils.sleep(100);
utils.freeMemory();
await db.freeMemory();
}
@@ -441,7 +441,7 @@ class DbCreator {
utils.freeMemory();
//сортировка серий
callback({job: 'series sort', jobMessage: 'Сортировка серий', jobStep: 5, progress: 0});
callback({job: 'sort', jobMessage: 'Сортировка', jobStep: 5, progress: 0});
await utils.sleep(100);
seriesArr.sort((a, b) => a.value.localeCompare(b.value));
await utils.sleep(100);
@@ -559,12 +559,12 @@ class DbCreator {
callback({job: 'optimization', jobMessage: 'Оптимизация', jobStep: 11, progress: 0});
await this.optimizeTable('series', 'series_book', 'series', db, (p) => {
if (p.progress)
p.progress = 0.5*p.progress;
p.progress = 0.2*p.progress;
callback(p);
});
await this.optimizeTable('title', 'title_book', 'title', db, (p) => {
if (p.progress)
p.progress = 0.5*(1 + p.progress);
p.progress = 0.2 + 0.8*p.progress;
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;
for (const row of rows) {// eslint-disable-line
chunk.push(row);
idsLen += row.bookId.length;
processed++;
while (1) {// eslint-disable-line
const chunk = await db.select({
table: from,
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);
idsLen = 0;
chunk = [];
processed += chunk.length;
callback({progress: processed/fromLength});
} else
break;
callback({progress: processed/rows.length});
await utils.sleep(100);
if (this.config.lowMemoryMode) {
await utils.sleep(10);
utils.freeMemory();
await db.freeMemory();
}
}
if (chunk.length) {
await saveChunk(chunk);
chunk = null;
}
await db.delete({table: to, where: `@@flag('toDel')`});
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' с бОльшим размером кеша блоков, для ускорения выборки
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);
db.wwCache = {};