有沒有一種使用Firebase執行數據庫式查詢的快速方法?使用Firebase的數據庫式查詢
例如:
給定火力參考users
與領域user_id
,name
和age
,什麼是做一個類似的查詢的最佳方式:
SELECT name FROM users WHERE `user_id`=147;
和
SELECT COUNT(*) FROM users WHERE age=21;
有沒有一種使用Firebase執行數據庫式查詢的快速方法?使用Firebase的數據庫式查詢
例如:
給定火力參考users
與領域user_id
,name
和age
,什麼是做一個類似的查詢的最佳方式:
SELECT name FROM users WHERE `user_id`=147;
和
SELECT COUNT(*) FROM users WHERE age=21;
一般來說,沒有。 Firebase本質上是一個「實時數據庫」,隨着數據更改不斷向您發送更新,因此執行通用查詢更加困難。現在,有一些(被公認是有限的)查詢提供的基元。請參閱文檔中的Queries/Limits頁面。
您可以經常解決這些限制,通過各種途徑:
隨着時間的推移,我們打算對此進行改進,因爲我們認識到這是一個弱點,與傳統關係數據庫系統提供的靈活查詢相比。
萊恩鮑爾先生當然是Firebase的所有事情的主人,所以聽他說。 ;)但是,這個特定的話題是我現在已經工作了幾個星期的話題。
這裏有一些我的想法,提升「運行在單獨的服務器」和「客戶端查詢」迴應:
ElasticSearch(使Node.js腳本)
隨着服務器上的node.js腳本,您可以集成ElasticSearch並在一小時內提供一些穩定的內容搜索。這裏有一個博客帖子和一個lib,使得它更容易:https://www.firebase.com/blog/2014-01-02-queries-part-two.html
緩存/常用查詢
這些可以通過一臺服務器/ cron進程讀取表,並複製其中的數據進行處理。例如,假設我想在註冊期間爲用戶的登錄名顯示「不可用/可用」,但出於某種複雜的原因,用不同的唯一ID存儲用戶記錄。
我的cron /服務器可以從users表中讀取所有記錄,然後將它們插入到通過電子郵件地址存儲的另一個表中,並將其用戶的記錄ID(或者我想知道的任何其他數據) 。
這種重複的數據方法是對手動緩存技術進行排序並且是無SQL環境中的常見做法;我們正在交易存儲空間(推測其價格便宜且可用),以提高速度和簡化流程。
定製查詢(使用隊列)
自定義查詢可以通過XHR(阿賈克斯)直接到服務器,它可以做苦役,並返回更好的結果發送。或者,您可以利用Firebase利用隊列連接服務器後端。
客戶端將查詢請求作爲JSON放入名爲queue
的特殊Firebase表中並等待響應。
服務器偵聽queue.on('child_added', ...)
,供應回用`queue_record.child數據(這裏「響應」,......數據......)
這有一些不錯的優勢。首先,任何數量的服務器都可以監聽並提供響應,從而輕鬆實現負載平衡。這個代碼非常簡單,在SO中設置和covered in another thread。
希望這有幫助!
現在還有一個用於集成ElasticSearch的lib,這非常容易,並且使得搜索變得非常容易,但代價是node.js腳本:https://www.firebase.com/blog/2014-01-02-queries-part-two.html – Kato 2014-01-15 23:21:34
我創建火力點數據表,所以當創建了自己的CMS的火力點我本
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
這就是Lehenbauer所說的「客戶端查詢」的含義。我建議使用這個等價物,但更多可讀的形式:'if(child [filter] .match('^'+ string)){'(代替從第二行開始的所有內容) – Jonathan 2015-10-24 10:55:17
邁克爾過濾它,你的球隊取得與查詢任何新的進展? – 2013-04-21 16:40:23
沒有值得注意的新功能。您可能對我們最近推出的這篇博客文章感興趣,因爲我們不支持類似於SQL的查詢:https://www.firebase.com/blog/2013- 04-12-denormalizing-is-normal.html – 2013-04-21 20:30:59
現在有一篇博客文章和一個新的「作爲單獨服務器運行」的方法,展示瞭如何將ElasticSearch:https:// www。 firebase.com/blog/2014-01-02-queries-part-two.html – Kato 2014-01-15 23:22:47