Browse Source

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

Book Pauk 2 years ago
parent
commit
20bb9f925a
3 changed files with 47 additions and 30 deletions
  1. 8 8
      client/components/Api/Api.vue
  2. 35 21
      server/core/DbCreator.js
  3. 4 1
      server/core/WebWorker.js

+ 8 - 8
client/components/Api/Api.vue

@@ -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
 ];

+ 35 - 21
server/core/DbCreator.js

@@ -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) {//константа выяснена эмпирическим путем "память/скорость"
-                await saveChunk(chunk);
+                    const ids = new Set();
+                    let id = iter.next();
+                    while (!id.done) {
+                        ids.add(id.value);
+                        if (ids.size >= 20000)
+                            break;
+                        id = iter.next();
+                    }
 
-                idsLen = 0;
-                chunk = [];
+                    return ids;
+                `
+            });
 
-                callback({progress: processed/rows.length});
+            if (chunk.length) {
+                await saveChunk(chunk);
 
-                await utils.sleep(100);
+                processed += chunk.length;
+                callback({progress: processed/fromLength});
+            } else
+                break;
+
+            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});

+ 4 - 1
server/core/WebWorker.js

@@ -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 = {};