【问题标题】:What would be the best way to implement "Tag" feature with firebase database?使用 firebase 数据库实现“标签”功能的最佳方法是什么?
【发布时间】: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


【解决方案1】:

Firebase 似乎还不支持此用例,但 google cloud datastore 支持。

https://cloud.google.com/appengine/articles/indexselection

该文档详细介绍了“爆炸式搜索”以及 google 数据存储区的 zigzag merge join algorithm 如何解决此问题。

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多