Firebase Cloud FireStore: вставка большого массива - PullRequest
0 голосов
/ 20 февраля 2019

Отказ от ответственности: я программирую около 4 месяцев, так что я все еще плохо знаком с программированием.

Я использую Firebase Cloud Firestore для базы данных и вставляю файлы CSV с большими объемами данных в них.Каждый файл может иметь длину около 100 тыс. Записей.Проект, над которым я работаю, требует, чтобы пользователь загружал эти CSV с веб-страницы.

Я создал загрузчик файлов и использую инструмент PapaParse JS для анализа csv, и он делает это очень хорошо, он мгновенно возвращает массив, даже если он очень длинный.Я попытался использовать самые большие файлы, которые смог найти, и затем записал их в консоль, это очень быстро.

Проблема в том, что когда я беру этот массив, он дает мне, перебирает его и вставляет в Cloud Firestore.Работает, данные вставляются именно так, как я этого хочу.Но это очень медленно.И если я закрою окно браузера, он перестает вставлять.Вставка только 50 записей занимает около 10-15 секунд.Так что с файлами по 100 тыс. Записей это не сработает.

Я рассматривал возможность использования облачных функций, но прежде чем попытаться узнать, как все это работает, возможно, я просто не делаю это эффективнопуть?Вот я и подумал спросить здесь.

Вот JS

// Get the file uploader in the dom
var uploader = document.getElementById('vc-file-upload');

// Listen for when file is uploaded 
uploader.addEventListener('change',function(e){
		
		// Get the file 
		var file = e.target.files[0];

		// Parse the CSV File and insert into Firestore
		const csv = Papa.parse(file, {
			header: true,
			complete: function(results) {
				console.log(results);
				
				sim = results.data;
				var simLength = sim.length;
				for (var i = 0; i < simLength;i++) {
					var indSim = sim[i]
					iccid = indSim.iccid;
					const docRef = firestore.collection('vc_uploads').doc(iccid);
					docRef.set({indSim}).then(function() {
					console.log('Insert Complete.')
					}).catch(function (err) {
					console.log('Got an error: '+ err)
				 	})
				};

			}
		});
});

1 Ответ

0 голосов
/ 20 февраля 2019

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

...