首页 > 解决方案 > 如何使用 Google Cloud Functions 将这个大型 JSON 导入 Firestore 数据库?

问题描述

我有一个大的 JSON 文件(大约 110MB)。我正在尝试将它导入到我的 Firestore 数据库中,以便在我的 React 应用程序中使用。我该怎么做呢?

我已经尝试过使用此代码:

const admin = require('firebase-admin');
const functions = require('firebase-functions');
const serviceAccount = require('./serviceaccount.json');
const datafile = './DIID.json';
const cors = require('cors')({ origin: true });

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://databaseurl.firebaseio.com"
});

const runtimeOpts = {
  timeoutSeconds: 540,
  memory: '2GB'
};

exports.setData = functions.runWith(runtimeOpts).https.onRequest((request, response) => {
    cors(request, response, () => {
        return admin.database().ref('Destiny').push(datafile)
            .then(() => {
                console.log("Done");
            })
    })
});

但是我的函数总是在指定的 540 秒后超时,并且没有数据写入数据库。

这是我的 JSON 结构的示例:

"423789": {
        "displayProperties": {
            "description": "PARADISE LOST: A group of castaways seek to overthrow the divine order.",
            "name": "Mythos Hack 4.1",
            "icon": "/common/destiny2_content/icons/47849b754551cc0f4f03acd7554882eb.jpg",
            "hasIcon": true
        },
        "collectibleHash": 4220193450,
        "backgroundColor": {
            "colorHash": 0,
            "red": 0,
            "green": 0,
            "blue": 0,
            "alpha": 0
        },
        "screenshot": "/common/destiny2_content/screenshots/423789.jpg",
        "itemTypeDisplayName": "Gauntlets",
        "uiItemDisplayStyle": "",
        "itemTypeAndTierDisplayName": "Rare Gauntlets",
        "displaySource": "",
        "action": {
            "verbName": "Dismantle",
            "verbDescription": "",
            "isPositive": false,
            "requiredCooldownSeconds": 0,
            "requiredItems": [],
            "progressionRewards": [],
            "actionTypeLabel": "shard",
            "rewardSheetHash": 0,
            "rewardItemHash": 0,
            "rewardSiteHash": 0,
            "requiredCooldownHash": 0,
            "deleteOnAction": true,
            "consumeEntireStack": false,
            "useOnAcquire": false
        }
}

对于许多不同的项目,这会一遍又一遍地重复。

我尝试过使用实时数据库,但文件大小超过了文件大小的最大配额,我还尝试了各种解析器来定期将文件写入数据库,但我似乎也无法正常工作。

以下是我迄今为止尝试过的一些事情的链接:

https://bigcodenerd.org/import-export-data-firestore/

定期将大数据 (json) 导入 Firebase

任何帮助将不胜感激,如果我的问题有更好的解决方案,我愿意改变它并以不同的方式处理它。

标签: google-cloud-firestoregoogle-cloud-functions

解决方案


推荐阅读