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

时间:2018-04-29 09:23:38

标签: json database firebase google-cloud-firestore

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

1 个答案:

答案 0 :(得分:0)

如果您为项目切换到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分钟的频率:

Image of frequency settings in Cloud Scheduler

对于非静态数据,通常使用时间戳记。 Firestore提供了一种在写入时从数据库服务器添加时间戳作为以下字段之一的方法:

u'timestamp': firestore.SERVER_TIMESTAMP

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