相关疑难解决方法(0)

Firestore - 如何构建订阅源并遵循系统

我在我的测试社交网络应用程序中使用Firebase实时数据库,您可以在其中关注并接收您关注的人员的帖子.传统的社交网络.我将我的数据库构造成这样的东西 -

Users
--USER_ID_1
----name
----email
--USER_ID_2
----name
----email

Posts
--POST_ID_1
----image
----userid
----date
--POST_ID_2
----image
----userid
----date

Timeline
--User_ID_1
----POST_ID_2
------date
----POST_ID_1
------date
Run Code Online (Sandbox Code Playgroud)

我还有另一个节点"内容",它只包含所有用户帖子的ID.因此,如果"A"跟在"B"之后,那么B的所有帖子ID都添加到A的时间轴.如果B发布了一些内容,那么它也会添加到其所有关注者的时间轴中.

现在这是我的实时数据库解决方案,但它显然存在一些可扩展性问题

  • 如果有人拥有10,000个关注者,则新帖子被添加到所有10,000个关注者的时间线中.
  • 如果有人拥有大量帖子,那么每个新粉丝都会在他的时间轴中收到所有这些帖子.

这些都是一些问题.

现在,我正在考虑将整个事情转移到firestore上,因为它声称是"可扩展的".那么我应该如何构建我的数据库,以便在firestore中消除我在实时数据库中遇到的问题.

java android database-design firebase google-cloud-firestore

44
推荐指数
5
解决办法
6627
查看次数

Android Firebase如何处理实时服务器到本地数据库的连接

至于关于这个主题和类似的问题ChildEventListener,没有相关的答案,所以继承我的.

我有一个本地SQLite数据库,其中包含所有数据,我还有Firebase实时数据库,我正在使用新条目或所有用户的实时更改进行更新.我目前正在使用ChildEventListener如下方法:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getDatabase().getReference();
    DatabaseReference childRef = rootRef.child("my_root");

    ChildEventListener eventListener = new ChildEventListener()
    {
        ....
    };
    childRef.addChildEventListener(eventListener);
Run Code Online (Sandbox Code Playgroud)

至于功能,使用此代码,我可以获得有关孩子的实时更改,获取新条目,删除子项以及我需要的所有内容但有一个问题.当监听器的这个特定活动加载时,onChildAdded监听器会在该根上为每个孩子调用大量的时间,如文档中所述:

child_added为每个现有子项触发一次,然后每次将新子项添加到指定路径时再次触发

所以我虽然专注于我真正需要的项目,但我已经完成了:

rootRef.orderByKey().startAt("-WhatTF123456789")...
Run Code Online (Sandbox Code Playgroud)

但后来我丢失了我的CRUD功能,因为它正在收听新条目,而不是所有条目.

所以我想出了一个解决方案.保留节点,其中包含对FireBase数据库所做的所有更改以及一个节点,其中所有用户已阅读并对本地数据库进行了更改以了解谁需要更新,然后使用addChildEventListener此特定节点.但这似乎是多余的.

我有什么选择来处理这种情况?

java android firebase firebase-realtime-database

5
推荐指数
1
解决办法
418
查看次数

可以在不同的 Firestore 集合中重复文档 ID 吗?

假设我有一个名为 的集合savedGamesFull。每当在此集合中创建文档时,它都会收到 Firebase 生成的 ID;然后,我重复使用该 ID,并将其提供给并行集合中的另一个文档savedGamesLight

在另一个示例中,对于集合中的每个文档,在集合players中都会有一个具有相同 id 的文档。playerPublicProfilesplayerStats

基本上,这种命名方法所做的就是节省了几行代码,并且不需要userId在那些并行文档中保留该字段。

但在阅读了有关热点的内容后(尽管它似乎不适用于此处),我担心此命名可能存在问题。

那么,在多个不同的集合中使用相同的文档 ID 有什么缺点吗?

nosql firebase google-cloud-platform google-cloud-firestore

4
推荐指数
1
解决办法
931
查看次数

在Firestore中构建此类数据的正确方法是什么?

我从Google Firebase服务中看过视频并阅读了Cloud firestore的文档,但我无法想象实时数据库.

我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程序.我希望通过我的所有产品执行搜索查询,以查找我对此类产品的提供商,并最终访问该提供商信息.

我打算为此目的使用这个结构:

Providers ( Collection )
   Provider 1 ( Document )
      Name
      City
      Categories
   Provider 2
      Name
      City

Products ( Collection )
   Product 1 ( Document )
      Name
      Description
      Category
      Provider ID
   Product 2
      Name
      Description
      Category
      Provider ID
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,一旦我得到我想要的产品,这种方法是否是访问提供商信息的正确方法?

我知道这在实时数据库中是可行的,使用我可以在提供者部分中搜索该提供者的提供者ID,但是使用Firestore我不确定它是否可能或者这是否正确.

java firebase firebase-realtime-database google-cloud-firestore

2
推荐指数
1
解决办法
1544
查看次数

使用 OR 运算符进行复合查询 flutter 和 firebase

我正在创建一个 flutter 应用程序,它应该查询 Firestore 集合并在满足两个条件时返回结果。这是我的代码:

Stream<List<FormQuestions>> get question {
  return someCollection
  .where('myQUestion', isEqualTo: 'nameQuestion')
  .snapshots()
  .map(_someQuestionListFromSnapshot);
}
Run Code Online (Sandbox Code Playgroud)

如果我只使用一个 .where() 条件,它就可以正常工作。但是对于两个,尽管我有满足这两个条件的文件,但它没有给出任何结果。我希望它返回多个 .where() 条件,如下所示:

Stream<List<FormQuestions>> get question {
  return someCollection
  .where('myQUestion', isEqualTo: 'nameQuestion')
  .where('myQuestion', isEqualTo: 'ageQuestion')
  .snapshots()
  .map(_someQuestionListFromSnapshot);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法添加 OR(||) 运算符,或者如何执行此操作以便获得“nameQuestion”和“ageQuestion”的结果?请协助。谢谢。

firebase flutter google-cloud-firestore

2
推荐指数
1
解决办法
5894
查看次数

Firestore 社交媒体好友请求数据模型

我正在使用 Firestore 构建社交媒体应用程序,我想知道构建好友请求数据的最佳方法是什么。

\n

当用户 John 想要向 Mary 和 Anne 添加好友时,我是否创建一个名为的根集合friend_requests并添加 3 个文档:

\n
    \n
  1. 以 John\xe2\x80\x99s 作为键的文档,userId其值将是 Mary 和 Anne\xe2\x80\x99s 的对象,其中包含他们的请求userIdstatus请求(待处理/接受/拒绝)
  2. \n
  3. 以 Mary\xe2\x80\x99suserId作为键的文档和一个带有 JohnuserIdstatusof request对象的数组
  4. \n
  5. 以 Annes\xe2\x80\x99s 作为键的文档userId和一个带有 JohnuserIdstatusof request对象的数组
  6. \n
\n

现在,当安妮和玛丽接受好友请求时,我删除friend_requests集合中的所有三个文档,然后:

\n
    \n
  • 我为每个用户(在users根集合中)添加一个名为的子集合friends,其中包含已接受请求的朋友的 usersIds、displayNames 和 photoURL
  • \n
\n

或者

\n
    \n
  • 我是否应该创建另一个根集合friends,为每个用户提供一个包含朋友信息的文档?
  • \n
\n

它似乎有很多重复的数据,因此我正在尝试解决它并找到在 Firestore …

data-modeling nosql firebase google-cloud-platform google-cloud-firestore

2
推荐指数
1
解决办法
1904
查看次数