Я пытаюсь решить проблему с производительностью при восстановлении данных на 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, и этот индекс существует, поэтому я могу получить быстрый подсчет записей с готовым набором (или не заданным), но, возможно, было бы лучше подсчитать вручную.