【发布时间】:2017-03-14 05:31:47
【问题描述】:
使用 firebase 数据库实现“标签”功能的最佳方式是什么?
假设有数以千万计的帖子,每个帖子都可以用一个或多个标签进行标记。
如果我想添加一个类似复选框的过滤器,查看者可以选择一个或多个标签来查看所有提供的标签下的帖子,这可以在 firebase 数据库中实现吗?
例如,如果用户选择以下 3 个标签“戏剧”、“爱情”和“恐怖”,我想返回至少带有这 3 个标签的所有帖子。
使用关系数据存储很容易做到这一点,但我不确定这是否可以在 NoSQL(云数据存储、firebase 数据库)存储中相对容易地完成。
【问题讨论】:
-
@Jay 怎么样? Firebase 实时数据库是否支持多列查询?上次我检查时,它只支持对单个列运行查询。
-
Firebase 没有列,只有父节点和子节点。请参阅我对Complex Queries这个问题的回答
-
@Jay 如果标签很多,您的解决方案将不起作用,例如,如果有 30 个标签,则可能有 30 个!变化太多,无法涵盖。例如,如果从 30 个标签中选择了“tag#5”和“tag#26”,搜索将如何与您的解决方案一起使用?
-
该解决方案仍然适用。 drama_love_horror... 等 30 个字段的字符串是少量数据,并且与 drama 字符串一样有效。如果该字符串感觉压倒性的,请将其映射到更短的字符串; 戏剧 = a,爱情 = b,恐怖 = c。现在是a_b_c。您还可以嵌套函数以加载所有“戏剧”并在代码中过滤其余部分。如果你想疯狂,添加一个第三方搜索库,比如 Elasticsearch。但是,如果向用户提供了拥有 30 个标签的选项,您可能需要重新考虑数据的呈现方式,因为有很多标签供用户选择。
-
如果我们存储像'drama_love_horror_comedy_60s_...'这样的索引,那么当用户想要查找'喜剧'和'60s'的电影时,索引将无法支持它。基本上,必须有 2^n(其中 n 是可能的标签的数量)索引组合。幸运的是,我从 google appengine 网站找到了这篇文章。谷歌云数据存储似乎支持它。
标签: firebase firebase-realtime-database nosql