如何为 Firestore 创建大量示例数据?

Posted

技术标签:

【中文标题】如何为 Firestore 创建大量示例数据?【英文标题】:How do I create a lot of sample data for firestore? 【发布时间】:2018-10-09 15:21:34 【问题描述】:

假设我需要在 Firestore 中创建许多不同的文档/集合。我需要快速添加它,比如复制和粘贴 json。我不能用标准的 firebase 控制台做到这一点,因为添加 100 个文档将让我永远。是否有任何解决方案可以在 firestore db 中批量创建具有给定结构的模拟数据?

【问题讨论】:

试试这个github.com/firebase/firebase-import 它适用于 Firestore 还是仅适用于实时数据库? 我也可以推荐github.com/marak/Faker.js - 用于实际的数据生成。然后是用于上传的firebase管理节点:) @AtifAbbAsi firebase 导入脚本仅适用于 Firebase 实时数据库,不适用于 Cloud Firestore。正如 DauleDK 所说,我通常使用 Admin SDK 来执行此操作。 @FrankvanPuffelen 感谢您的纠正。! 【参考方案1】:

如果您为项目切换到 Cloud Console(而不是 Firebase 控制台),则可以使用 Cloud Shell 作为起点。

在 Cloud Shell 环境中,您会发现 nodepython 等工具已安装并可用。使用您喜欢的任何一个,您都可以使用Server Client libraries 编写脚本。

例如在 Python 中:

from google.cloud import firestore
import random

MAX_DOCUMENTS = 100
SAMPLE_COLLECTION_ID = u'users'
SAMPLE_COLORS = [u'Blue', u'Red', u'Green', u'Yellow', u'White', u'Black']

# Project ID is determined by the GCLOUD_PROJECT environment variable
db = firestore.Client()

collection_ref = db.collection(SAMPLE_COLLECTION_ID)

for x in range(0, MAX_DOCUMENTS - 1):
collection_ref.add(
    u'primary': random.choice(SAMPLE_COLORS),
    u'secondary': random.choice(SAMPLE_COLORS),
    u'trim': random.choice(SAMPLE_COLORS),
    u'accent': random.choice(SAMPLE_COLORS)
)

虽然这是使用静态数据集启动和运行的最简单方法,但它的存在有点不尽如人意。也就是说,使用 Firestore,需要实时动态数据来执行其功能,例如实时查询。对于此任务,使用Cloud Scheduler & Cloud Functions 是定期更新样本数据的一种相对简单的方法。

除了示例生成代码之外,您还将在 Cloud Scheduler 中指定更新频率。例如在下图中,*/10 * * * * 使用标准的 unix-cron 格式定义了每 10 分钟一次的频率:

对于非静态数据,时间戳通常很有用。 Firestore 提供了一种在写入时将来自数据库服务器的时间戳作为字段之一添加的方法:

u'timestamp': firestore.SERVER_TIMESTAMP

值得注意的是,如果没有正确分片,这样的时间戳将在生产系统中成为热点。通常,对同一集合的 500 次写入/秒是您想要的最大值,这样索引就不会成为热点。分片可以很简单,比如每个用户都有自己的集合(每个用户每秒 500 次写入)。但是对于本示例,通过预定的 Cloud Function 每分钟编写 100 个文档绝对不是问题。

【讨论】:

以上是关于如何为 Firestore 创建大量示例数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何为使用 Cloud Firestore 的 Flutter 应用设置安全规则?

如何为 Firestore 文档设置到期日期 [重复]

如何为 Instagram 克隆构建 Cloud Firestore 数据?

如何为 Firestore 数据库的 Cloud Functions 中的每个集合插入、更新添加时间戳

Chart.js - 如何为随时间发生的大量数据创建自动缩放折线图

如何为 Pandas RE .str.extract() 使用 RE OR Operand