javascript - Firebase 云 FireStore : Insert Large Array

标签 javascript firebase google-cloud-firestore papaparse

免责声明:我已经编程大约 4 个月了,所以我对编程还是很陌生。

我将 Firebase Cloud Firestore 用于数据库,并插入包含大量数据的 CSV 文件。每个文件的长度约为 100k 条记录。我正在从事的项目要求用户从网页上传这些 CSV。

我创建了一个文件 uploader ,我正在使用 PapaParse JS 工具来解析 csv,它做得非常好,它立即返回一个数组,即使它很长。我尝试使用我能找到的最大文件,然后将其记录到控制台,速度非常快。

问题是当我获取它给我的数组并循环遍历它并将其插入 Cloud Firestore 时。它有效,数据完全按照我想要的方式插入。但它很慢。如果我关闭浏览器窗口,它就会停止插入。仅插入 50 条记录大约需要 10-15 秒。所以对于 100k 记录的文件,这是行不通的。

我正在考虑使用 Cloud Functions,但在我现在尝试了解它是如何工作之前,也许我只是没有以有效的方式这样做?所以我想在这里问一下。

这是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)
				 	})
				};

			}
		});
});

最佳答案

如果您只上传文件(可能上传到 Cloud Storage)并在 Cloud Functions 或其他一些后端执行数据库操作,几乎肯定会整体更快,即使用户离开应用程序,它也会完成。

关于javascript - Firebase 云 FireStore : Insert Large Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54791244/

相关文章:

node.js - Firebase 管理员身份验证 token 已撤销

c - Firebase如何从ESP32/Arduino获取数据

java - 如何与 firestore 分开读取集合

javascript - JavaScript 闭包的使用

javascript - 没有显示显示这个奇怪错误的字符串? function(){return Fn ("DataSnapshot.val",0,0,arguments.length),this.node_.val()}

javascript - 仅使用 javascript 删除多个选定的表行

android - Firebase 定期更新数据库

python - google.api_core.exceptions.ServiceUnavailable : 503 The datastore operation timed out, 或使用流时数据暂时不可用

javascript - 如何使用 vba 从 Datastore.prime 中抓取数据

javascript - 使用 Web 组件而不注册为自定义元素?