Добавлено формирование title_book
This commit is contained in:
@@ -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
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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});
|
||||||
|
|||||||
@@ -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 = {};
|
||||||
|
|||||||
Reference in New Issue
Block a user