Dex ie обновления в таблице с 2 составными ключами очень медленные в iOS - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь решить проблему с производительностью при восстановлении данных на iOS (то есть данные существуют в таблице, затем я обновляю некоторые из них из резервной копии плоского файла). Мой фактический случай в 1250 раз медленнее iOS, чем Windows. Я начал с примера дождевых капель из Dex ie .bulkPut, который не демонстрирует это поведение (оно медленнее, но только на 15%), и постепенно изменил его, чтобы он больше походил на то, что мне нужно сделать.

Я обнаружил, что если в моей таблице есть один составной ключ, я могу выполнить массивную передачу данных дважды, и это займет почти одинаковое количество времени оба раза. Но если есть два составных ключа, вторая запись занимает примерно одинаково время на компьютере, но гораздо больше на iOS (раз в секундах).

                 Windows         Windows          iOS            iOS
    Records      First write     Second write     First write    Second write
     20,000        2.393           1.904           5.057          131.127
     40,000        5.231           3.941           9.533          509.616
     60,000        7.808           8.331          14.188         1205.181    

Вот моя тестовая программа:

var db = new Dexie("test");
db.delete().then(function() {
    db.version(1).stores({
        raindrops: '[matrix+row+col], [matrix+done]'
    });
    db.open();
    var t1 = new Date();
    var drops = [];
    for (var i=0;i<20000;++i) { // make a matrix
        drops.push({matrix: 0, row: Math.floor(i/100)+1, col: i % 100 +1, done: i%2});
    }
    db.raindrops.bulkPut(drops).then(function(lastKey) {
        t2 = new Date();
        console.log("Time in seconds " + (t2.getTime() - t1.getTime())/1000);
        db.raindrops.bulkPut(drops).then(function(lastKey) {
            t3 = new Date();
            console.log("Reputting -- Time in seconds " + (t3.getTime() - t2.getTime())/1000);
        });
    });
});

Мне интересно, есть ли у кого-нибудь Любые предложения. Мне нужен второй индекс, но мне также нужно, чтобы люди могли выполнять восстановление за конечное время (мои пользователи не очень осторожны при очистке данных браузера). Есть ли шанс, что эта производительность улучшится? Тот факт, что это гораздо лучше для Windows говорит о том, что так не должно быть. exing? Done равен 0 или 1, и этот индекс существует, поэтому я могу получить быстрый подсчет записей с готовым набором (или не заданным), но, возможно, было бы лучше подсчитать вручную.

...