我正在测试Firestore来替换我们关系系统的一部分。假设一个简单的类似Twitter的结构,用户可以跟随其他用户:
users/{userID}
-- userInfo
relationships/{followerID_followedID}
-- followerId (string)
-- followedId (string)
-- createdAt (timestamp)
posts/{postID}
-- userId
-- createdAt (timestamp)
-- payload
我不知道如何查询(或模拟/非规范化数据以便能够查询)来自我关注的用户的汇总帖子。
例如,这些是我关注的用户:
db.collection("relationships")
.whereEquals("followerId", ME)
这些是今天的最新帖子
db.collection("posts")
.whereGreaterThan("createdAt", now-24h)
我知道我无法进行交叉搜索查询以获取今天发布的帖子我关注的用户。
关于如何对帖子/集合,索引或数据重复进行建模以及我可以有效地进行这些类型的查询之后,我提出了一些建议
我已经看到了一个基于旧版Firebase数据库的示例,该数据库更新了每个帖子上的所有关注者时间轴:
self._mainUser.child("followers").once("value", function(followerList) {
followerList.forEach(function(follower) {
if (!follower.val()) {
return;
}
var childRef = db.collection("users")
.document(follower.name());
childRef.collection("feed").document(sparkRefId).set(true);
});
});
这种解决方案真的是唯一的出路吗?我的意思是,对于拥有100,000多名粉丝的用户来说,更新100,000个文件?因为不是完全放弃我的SQL后端(我希望),保持最小的SQL来运行这些查询并节省大量的计算和存储也许是有趣的。