【发布时间】:2016-05-25 17:08:25
【问题描述】:
我有属于群组的帖子。在可扩展性方面,我正在考虑两种不同的方法:
方法1:通过查询访问的组值发布
结构:
{
"posts": {
"1": {
"message": "hello world",
"timeAdded": 1718281919,
"posterId": 123,
"group": 15
},
"2": {
"message": "this is second"
"timeAdded": 12717212182,
"posterId": 124,
"group": 3
},
...
}
}
通过如下查询获取一个组,即第 15 组的帖子:
ref.child("posts/group").queryEqualToValue("15").observeEventType(.Value, withBlock: { snapshot in ... })
方法二:组内重复数据
结构:
{
"posts": {
"1": {
"message": "hello world",
"timeAdded": 1718281919,
"posterId": 123,
"group": 15
},
"2": {
"message": "this is second"
"timeAdded": 12717212182,
"posterId": 124,
"group": 3
},
...
},
"groups": {
"15": {
"posts": {
"1": {
"message": "hello world",
"timeAdded": 1718281919,
"posterId": 123,
},
...
}
},
...
},
...
}
获取一个组的,即第 15 组,简单地发帖:
ref.child("groups/15").observeEventType(.Value, withBlock: { snapshot in ... })
哪种设计更适合可扩展性?
编辑:
作为一个附带问题,是否有一个 Firebase 查询可以查询多个值,而不仅仅是一个,即不仅返回第 15 组的帖子,还返回 21、28 等的帖子。
【问题讨论】:
-
方法一有什么问题?它不做什么?该方法将处理数千个帖子并立即返回属于第 15 组的任何帖子。 (我并不是说它是最好的,只是好奇它有什么问题)
-
@Jay 我需要的关键要求之一,我应该提到的是我必须一次查询几个不同的组。除非有 queryEqualToValue("15,21,24") 类型的查询,否则我认为通过方法 2 在 3 个组 15、21、24 上添加 3 个观察可能会更快。
标签: ios swift firebase scalability firebase-realtime-database