持有移动注册令牌的最佳数据结构

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

上下文:
我正在构建一个以 Firebase 作为后端的生日提醒移动应用程序。我正在考虑使用预定的云功能向在特定日期过生日的用户发送通知。 我正在考虑将 Firestore 中的生日数据保存在 365 单独的文档中。
例如:
Jan1 - [user1, user2, user3...]
Jan2 - [user4, user5...]
...
Dec31 - [userX, userY, userZ...]

我看到的优势是云函数只需要读取特定文档(文档名称可以从当前日期识别)。
这是一种可扩展的方法吗?
在 Firebase/GCP 中有没有更好的选择来实现这个功能?

firebase google-cloud-platform google-cloud-firestore google-cloud-functions nosql
2个回答
0
投票

对我来说,我认为您的方法从长远来看可能无法扩展,并且随着数据的增长会产生性能问题。

更具可扩展性的方法是将所有生日存储在一个集合中,并使用云函数查询集合中与当前日期匹配的生日。

您可以在文档中添加一个字段来存储生日,然后使用查询根据当前日期过滤文档。这将消除每天将数据存储在单独文档中的需要。

这是一个示例,说明如何查询 Firestore 集合以获取当天生日的用户:

def send_birthday_notifications(request):
    today = datetime.datetime.now().strftime('%m-%d')
    users_ref = db.collection('users')
    query = users_ref.where('birthdate', '==', today).stream()
    for user in query:
        # send notification to user

0
投票

我正在考虑使用预定的云功能来发送通知。

这是个好主意。

我正在考虑将Firestore中的生日数据保存在365个单独的文档中。

这也是一个很好的主意,但只有当文档保持在最大限制以下时它才会起作用。根据有关usage and limits的官方文档:

文档的最大大小:1 MiB(1,048,576 字节)

如您所见,单个文档中的数据总量不得超过 1 MiB。当我们谈论存储文本时,您可以存储很多东西。但是,不要将 UID 存储为单独的字段,最好创建一个数组类型的字段,您可以在其中添加所有 UID。所以你可以每天 schedule Cloud Function,读取数组的内容并发送通知。

如果你觉得你能达到1MiB,那么我建议你创建两个文件,一个是从

a
m
开头的UID,另一个是从
n
z
开头的UID。如果这也不起作用,请创建三个文档,依此类推。

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