2013-06-20 43 views
13

Ben Firebase üzerinde hiyerarşi ardından bazı veriler gizlilik gizlidir var: Ben videolar kimlikleri listesi almaya çalışıyorumFirebase yanıtında çocuklarını almadan, Firebase çocuk düğümlerinin adlarını alın.

enter image description here


Ben sadece can (kırmızı altını) tüm düğümleri alın, ardından isimlerini algılayın ve bir dizide saklayın!
Ancak bu düşük performansa neden olur; Çünkü benim durumumda dataSnapshot, benim durumumda çok büyük olduğu için, tüm düğümlerin içeriğini geri almaktan kaçınmak ve kimliklerini almak için bunların üzerinden geçmek istiyorum, sadece kimlikleri, yani yuvalanmış elemanları olmadan almam gerekiyor.

new Firebase("https://PRIVATE_NAME.firebaseio.com/videos/").once(
    'value', 
    function(dataSnapshot){ 

     // dataSnapshot now contains all the videos ids, lines & links 
     // this causes many performance issues 

     // Then I need to loop over all elements to extract ids ! 
     var videoIdIndex = 0; 
     var videoIds = new Array(); 

     dataSnapshot.forEach(
      function(childSnapshot) { 
       videoIds[videoIdIndex++] = childSnapshot.name(); 
      } 
     ); 

    } 
); 

nasıl veri transferi çok önlemek ve Kimliğini almak için retrived veriler üzerinde döngü önlemek için sadece kimlikleri almak olabilir:

İşte benim kod? Bu kimlikleri doğrudan geri almanın bir yolu var mı?

cevap

10

GÜNCELLEME: Artık bir yol için yalnızca anahtarları getirecek REST API'sında shallow komutu var. Bu henüz SDK'lara eklenmedi.

Firebase'de, altındaki verileri almadan düğüm adlarının bir listesini edinemezsiniz. Yine de değil. Performans sorunları normalleştirme ile ele alınabilir.

Esasen, amacınız, verileri sarf malzemesi parçalarına bölmektir. Tek bir yolla başlık, vb. Gibi birkaç meta alanla mümkün olan video anahtarlar listenizi saklayın ve toplu içeriği başka bir yerde saklayın. Örneğin:

/video_meta/id/link, title, ... 
/video_lines/id/... 

, denormalizing hakkında daha fazla bilgi şu makaleye göz denetlemek için: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

+1

@Kato hey SDK 'shallow' eklemek için herhangi bir planları var olduğunu ayarlamanız gerekir? –

+0

Yoktur. HTTP isteği yapamayan bir araç kullanıyor musunuz? Bu pratik değilse, SDK referansı için ids listesini bir sep yolunda saklayabilirsiniz. Çok yollu güncellemelere bakın. – Kato

5

Biraz eski ve muhtemelen zaten biliyorum, ama durumda başka biri geliyor. Bunu kullanarak DİNLENME API çağrısı yapabilir, yalnızca parametre burada shallow=true

documentation

+0

Bu çok yararlı, Haziran 2013'te mevcut değildi, Bu güncellemeyi paylaştığınız için çok teşekkürler! –

+0

web api ile yapılabilir mi? – vinesh

+0

Sanırım, bu ekimde sadece REST için sığ eklediler – webduvet

İlgili konular