使用Firebase执行数据库样式查询是否有快速方法?
例如:
如果firebase参考users
包含字段user_id
,name
和age
,那么执行与此类似的查询的最佳方式是:
SELECT name FROM users WHERE `user_id`=147;
和
SELECT COUNT(*) FROM users WHERE age=21;
答案 0 :(得分:70)
一般来说,没有。 Firebase本质上是一个“实时数据库”,随着数据的变化不断向您传输更新,因此进行通用查询更加困难。目前,提供了一些(公认有限的)查询原语。请参阅文档中的Queries/Limits页面。
您可以通过各种方法解决这些限制:
我们打算随着时间的推移对此进行改进,因为我们发现与传统关系数据库系统提供的灵活查询相比,这是一个弱点。
答案 1 :(得分: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放入名为queue
的特殊Firebase表中,并等待响应。
服务器侦听queue.on('child_added', ...)
并使用`queue_record.child('response',... data here ...)提供数据。
这有一些很好的优点。例如,任何数量的服务器都可以监听并提供响应,使负载平衡变得轻而易举。设置的代码非常简单,而covered in another thread在这里设置。
希望这有用!
答案 2 :(得分:2)
我为firebase创建了自己的CMS,所以在创建firebase数据表时我用这个过滤了它
var child = ref.child();
var compare;
switch(filter){
case "First_Name":
compare = child.First_Name;
break;
case "Last_Name":
compare = child.Last_Name;
break;
case "Phone_Number":
compare = child.Phone_Number;
break;
case "Department_Number":
compare = child.Department_Number;
break;
case "Position":
compare = child.Position;
break;
case "Status":
compare = child.Status;
break;
case "Tier":
compare = child.Tier;
break;
}
if(compare.match("^" + string)){
//display items