使用Firebase的数据库样式查询

Mat*_*son 46 javascript firebase

有没有一种快速的方法来使用Firebase执行数据库样式的查询?

例如:

给定一个火力点参考users与领域user_id,name以及age什么是做类似这样的查询的最佳方式:

SELECT name FROM users WHERE `user_id`=147;
Run Code Online (Sandbox Code Playgroud)

SELECT COUNT(*) FROM users WHERE age=21;
Run Code Online (Sandbox Code Playgroud)

Mic*_*uer 70

一般来说,没有.Firebase本质上是一个"实时数据库",随着数据的变化不断向您传输更新,因此进行通用查询更加困难.目前,提供了一些(公认有限的)查询原语.请参阅文档中的查询/限制页面.

您通常可以通过各种方法解决这些限制:

  • 智能地使用位置名称和优先级.如果将数据结构化为/ users/[userid]/name,则只需检索/ users/147/name即可完成第一个"查询".如果您知道要按年龄查询,可以使用age作为用户节点的优先级,然后执行"usersRef.startAt(21).endAt(21).on('child_added',...)"到让所有用户年龄为21岁.您仍然需要手动计算.
  • 做客户端查询. 如果整个数据集很小,您可以检索整个数据集,然后在客户端上手动过滤/处理它.
  • 运行单独的服务器.它可以连接到Firebase,同步数据,然后回答客户的"查询".它仍然可以通过Firebase与客户进行通信,Firebase仍然可以作为主数据存储,但您的单独服务器可以快速执行查询.

我们打算随着时间的推移对此进行改进,因为我们发现与传统关系数据库系统提供的灵活查询相比,这是一个弱点.

  • 没有值得注意的新功能.您可能对我们最近发布的这篇博客文章感兴趣,描述了为Firebase构建数据的最佳实践,因为我们不支持类似SQL的查询:https://www.firebase.com/blog/2013- 04-12-反规范化,是-normal.html (3认同)
  • 现在有一个博客文章和一个新的"运行作为一个单独的服务器"的方法,显示了整合ElasticSearch是多么的疯狂:https://www.firebase.com/blog/2014-01-02-查询,这部分two.html (3认同)

Kat*_*ato 24

Lehenbauer先生当然是Firebase所有东西的主人,所以听他说.;)然而,这个特别的主题是我已经劳动了几个星期的话题.

以下是我的一些想法,以增强"运行单独的服务器"和"客户端查询"响应:

ElasticSearch(node.js脚本)

使用服务器上的node.js脚本,您可以集成ElasticSearch并在一小时内提供一些可靠的内容搜索.这是一篇博客文章和一篇免费提供的文章:https://www.firebase.com/blog/2014-01-02-queries-part-two.html

可缓存/常见查询

这些可以由服务器/ cron进程处理,该进程读取表并复制数据.例如,假设我想在注册期间为用户的登录名显示"不可用/可用",但出于某些复杂的原因,用不同的唯一ID存储用户记录.

我的cron/server可以读取users表中的所有记录,然后将它们插入到另一个通过电子邮件地址存储的表中,其中包含用户记录ID的值(或者我可能想知道的任何其他数据).

这种重复数据方法是一种手动缓存技术,是No-SQL环境中的常见做法.我们正在交换存储空间(假设它便宜且可用),以提高速度和简化流程.

自定义查询(使用队列)

自定义查询可以通过XHR(ajax)直接发送到服务器,这可以节省大量工作并返回更好的结果.或者,您可以利用Firebase利用队列连接服务器后端.

客户端将查询请求作为JSON放入一个名为的特殊Firebase表中,queue并等待响应.

服务器queue.on('child_added', ...)使用`queue_record.child('response',... data here ...)监听并提供数据.

这有一些很好的优点.例如,任何数量的服务器都可以监听并提供响应,使负载平衡变得轻而易举.这个代码非常简单,在SO中设置和覆盖另一个线程.

希望这有用!