我在我的测试社交网络应用程序中使用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发布了一些内容,那么它也会添加到其所有关注者的时间轴中.
现在这是我的实时数据库解决方案,但它显然存在一些可扩展性问题
这些都是一些问题.
现在,我正在考虑将整个事情转移到firestore上,因为它声称是"可扩展的".那么我应该如何构建我的数据库,以便在firestore中消除我在实时数据库中遇到的问题.
java android database-design firebase google-cloud-firestore
至于关于这个主题和类似的问题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此特定节点.但这似乎是多余的.
我有什么选择来处理这种情况?
假设我有一个名为 的集合savedGamesFull。每当在此集合中创建文档时,它都会收到 Firebase 生成的 ID;然后,我重复使用该 ID,并将其提供给并行集合中的另一个文档savedGamesLight。
在另一个示例中,对于集合中的每个文档,在集合players中都会有一个具有相同 id 的文档。playerPublicProfilesplayerStats
基本上,这种命名方法所做的就是节省了几行代码,并且不需要userId在那些并行文档中保留该字段。
但在阅读了有关热点的内容后(尽管它似乎不适用于此处),我担心此命名可能存在问题。
那么,在多个不同的集合中使用相同的文档 ID 有什么缺点吗?
我从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
我正在创建一个 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”的结果?请协助。谢谢。
我正在使用 Firestore 构建社交媒体应用程序,我想知道构建好友请求数据的最佳方法是什么。
\n当用户 John 想要向 Mary 和 Anne 添加好友时,我是否创建一个名为的根集合friend_requests并添加 3 个文档:
userId其值将是 Mary 和 Anne\xe2\x80\x99s 的对象,其中包含他们的请求userId和status请求(待处理/接受/拒绝)userId作为键的文档和一个带有 JohnuserId和statusof request对象的数组userId和一个带有 JohnuserId和statusof request对象的数组现在,当安妮和玛丽接受好友请求时,我删除friend_requests集合中的所有三个文档,然后:
users根集合中)添加一个名为的子集合friends,其中包含已接受请求的朋友的 usersIds、displayNames 和 photoURL或者
\nfriends,为每个用户提供一个包含朋友信息的文档?它似乎有很多重复的数据,因此我正在尝试解决它并找到在 Firestore …
data-modeling nosql firebase google-cloud-platform google-cloud-firestore