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

Eri*_*del 8 database json firebase google-cloud-firestore

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

Dan*_*ath 7

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

在 Cloud Shell 环境中,您将找到已安装且可用的工具,例如nodepython使用您喜欢的任何一个,您都可以使用服务器客户端库编写脚本。

例如在 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)
})
Run Code Online (Sandbox Code Playgroud)

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

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

Cloud Scheduler 中的频率设置图片

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

u'timestamp': firestore.SERVER_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

值得注意的是,如果没有正确分片,这样的时间戳将在生产系统中成为热点。通常,每秒对同一集合进行 500 次写入是您希望的最大值,这样索引就不会成为热点。分片可以像每个用户拥有自己的集合一样简单(每个用户每秒 500 次写入)。然而对于这个例子来说,通过预定的云函数每分钟写入 100 个文档绝对不是问题。