我正在开发一个项目,需要在 Firebase Firestore 中存储大型数据集(大约 250 万条记录)。我希望通过一次操作或尽可能高效地实现这一目标,以最大限度地减少所使用的时间和资源。
以下是我的设置详细信息:
Firebase 产品: Firestore
数据结构:我计划创建一个名为tickets的集合,其中每个文档将具有以下结构:
{
"ticketNumber": <number>,
"createdAt": <timestamp>,
"status": <string>
}
例如:
{
"ticketNumber": 1,
"createdAt": "2023-10-01T12:00:00Z",
"status": "open"
}
编程语言:JavaScript(使用 Node.js)
当前方法:我正在生成票号并尝试使用 Firestore 的批量写入来存储它们。但是,我不确定处理如此大量数据的最佳方法。
示例代码:这是我生成票号并尝试上传它们的方法的简化版本:
const admin = require('firebase-admin');
admin.initializeApp(); // Initialize Firebase Admin SDK
const firestore = admin.firestore();
async function uploadTickets(ticketNumbers) {
const batchSize = 500; // Firestore batch write limit
const ticketsRef = firestore.collection('tickets');
for (let i = 0; i < ticketNumbers.length; i += batchSize) {
const batch = firestore.batch();
const batchTickets = ticketNumbers.slice(i, i + batchSize);
batchTickets.forEach(ticketNumber => {
const ticketRef = ticketsRef.doc(); // Auto-generate document ID
batch.set(ticketRef, {
ticketNumber: ticketNumber,
createdAt: admin.firestore.FieldValue.serverTimestamp(),
status: 'open'
});
});
await batch.commit();
console.log(`Uploaded tickets ${i + 1} to ${Math.min(i + batchSize, ticketNumbers.length)}`);
}
console.log('All tickets uploaded successfully!');
}
// Generate an array of ticket numbers
const ticketNumbers = Array.from({ length: 2500000 }, (_, i) => i + 1); // Example: [1, 2, ..., 2500000]
uploadTickets(ticketNumbers).catch(console.error);
具体问题:
在不达到性能限制的情况下将大量记录批量上传到 Firestore 的最佳方法是什么?
在 Firestore 中处理如此大的数据集时,我应该注意哪些最佳实践或限制?
任何人都可以推荐可以帮助促进此过程的工具或库吗?
其他背景:
我已经考虑过使用 Firestore 的批量写入,但我知道每批有 500 次写入的限制。我正在实现一个循环来处理此限制,但我担心以下问题:
成本:这种方法会因写入次数而产生大量成本吗?
性能:如何确保上传过程高效且不会导致超时或错误?
数据完整性:我可以采取哪些步骤来确保所有记录成功上传且无损?
任何指导或提示将不胜感激!
我已经考虑过使用 Firestore 的批量写入,但我知道每批有 500 次写入的限制。我正在实现一个循环来处理此限制,但我担心以下问题:
这种方法会因为写入次数而产生大量成本吗?
Firestore 按文档写入收费,而不是按批次收费。因此,如果您要写入 2500 万个文档,则将按 2500 万个文档写入操作收费 - 无论您如何批处理。
在不达到性能限制的情况下将大量记录批量上传到 Firestore 的最佳方法是什么?
我在 Firestore 的 BulkWriter 类中获得了最佳体验。 Firebase 文档还建议此处:
要写入大量文档,请考虑使用批量写入器或并行化单独写入。
除此之外,您还需要阅读:将大量文档写入 Firestore 的最快方法是什么?,在那里您还会发现,像您当前那样使用顺序批处理比 慢很多使用并行化的单独写入(这就是文档也建议这样做的原因)。