Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Cloud Firestore为案例提供了更好的结构_Database_Firebase_Data Structures_Google Cloud Firestore_Nosql - Fatal编程技术网

Database Cloud Firestore为案例提供了更好的结构

Database Cloud Firestore为案例提供了更好的结构,database,firebase,data-structures,google-cloud-firestore,nosql,Database,Firebase,Data Structures,Google Cloud Firestore,Nosql,我正在开发一个应用程序,用户(firebase auth)将注册他们的费用,并将在每个星期天收到通知(OneSignal),告知他们本周到期的费用。 我的firestore结构是: -users (collection) ---xxXXxxX (user document) -----email -----OneSignal ID -----expenses (collection) -------yyYYYyY (expense document) ---------dueDate -----

我正在开发一个应用程序,用户(firebase auth)将注册他们的费用,并将在每个星期天收到通知(OneSignal),告知他们本周到期的费用。 我的firestore结构是:

-users (collection)
---xxXXxxX (user document)
-----email
-----OneSignal ID
-----expenses (collection)
-------yyYYYyY (expense document)
---------dueDate
---------value
---------userId
-------aaAAaaA (expense document)
---------dueDate
---------value
---------userId
---bBBbbBB (another user document)
-----email
-----OneSignal ID
-----expenses (collection)
-------wwWWwwW (expense document)
---------dueDate
(...)
基于这种结构,每个周日谷歌云都会运行一个日程表功能,查询一周内到期的所有费用(收集组查询-返回每个用户可以有多个费用的费用列表)

有了这个仍然有效的列表,我将手动将userId与费用分开,创建第二个列表,每个用户有一个寄存器。对于第二个列表,函数将获得每个用户的OneSignal ID(另一个在firebase上的查询,列表中每个用户一个),并在OneSignal服务中为每个用户注册通知

注:OneSignal ID可以更改,因为在这种情况下,我无法节省OneSignal ID的费用

我猜这种结构会起作用,但这似乎不是最好的解决方案,因为许多查询都是在“后台”运行的,这在将来可能会很昂贵

有人对这个案子有更好的建议吗?也许firestore上的另一个结构

我希望我能很好地解释“问题”。英语不是我的第一语言


谢谢大家!

从我在文档中读到的内容来看,你做得很完美,原因如下(任何人,如果我错了,请纠正我)

  • 当用户下载的数据超过Xgb时,Firebase会向您收费。据我所知,你不会因为做查询和过滤而收费。所以你在这方面很好

  • Firebase firestore查询时间完全取决于您获得的结果数量。结构不重要。所以如果你对这个结构没意见,就坚持下去。我看没问题

  • 编辑:我刚刚重新阅读了文档,发现:

    当您使用Cloud Firestore时,您需要支付以下费用:

    • 执行的读取、写入和删除次数
    • 数据库使用的存储量,包括元数据和索引的开销
    • 您使用的网络带宽量
    所以当你询问时,你会被起诉。在这种情况下,构建数据库的更好方法可能是展平费用树。你可以吃这样的东西

    Users - - - -
                 |------
                 |------
    
    Expenses - - - - -
                         user ID - - -
                          Etc---------
                          Etc----------
    
    通过这种方式,您可以筛选用户的查询。
    .

    实际上,firebase对读取、编辑、删除和存储数据的次数收费。[。这是我希望避免只发送一个通知而搜索所有用户费用的原因之一。但我不知道如何…我只是更新了我的答案。我的意思是,你可以仅为费用进行另一次收集?并将用户ID作为文档或ID本身写入。这将为你节省一些阅读资料谢谢你@Agustin。我将理解您的建议,但我不知道解决方案将如何节省一些读取,因为在我看来,我仍然需要按用户在一周内读取所有费用(如果用户有,返回许多费用),然后根据用户集合获取每个用户的OnSignal ID,对吗?只是作为补充,使用集合组[我也可以按用户筛选所有费用。我认为这与您提到的结果基本相同,对吗?是的:)我认为您可以节省一些阅读量,将其放平一点,但老实说,没有太多。我看不到这方面有任何更大的改进,对不起!您只能等待firestore专业人士给您一个提示。