在更短的时间内通过一次操作在 Firebase 中高效存储 250 万条记录[重复]

问题描述 投票:0回答:1

我正在开发一个项目,需要在 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 次写入的限制。我正在实现一个循环来处理此限制,但我担心以下问题:

成本:这种方法会因写入次数而产生大量成本吗?

性能:如何确保上传过程高效且不会导致超时或错误?

数据完整性:我可以采取哪些步骤来确保所有记录成功上传且无损?

任何指导或提示将不胜感激!

firebase google-cloud-functions nosql large-data
1个回答
0
投票

我已经考虑过使用 Firestore 的批量写入,但我知道每批有 500 次写入的限制。我正在实现一个循环来处理此限制,但我担心以下问题:

这种方法会因为写入次数而产生大量成本吗?

Firestore 按文档写入收费,而不是按批次收费。因此,如果您要写入 2500 万个文档,则将按 2500 万个文档写入操作收费 - 无论您如何批处理。

在不达到性能限制的情况下将大量记录批量上传到 Firestore 的最佳方法是什么?

我在 Firestore 的 BulkWriter 类中获得了最佳体验。 Firebase 文档还建议此处

要写入大量文档,请考虑使用批量写入器或并行化单独写入。

除此之外,您还需要阅读:将大量文档写入 Firestore 的最快方法是什么?,在那里您还会发现,像您当前那样使用顺序批处理比 慢很多使用并行化的单独写入(这就是文档也建议这样做的原因)。

© www.soinside.com 2019 - 2024. All rights reserved.