2013-06-20 15 views
13

Mam następującą hierarchię na Firebase, niektóre dane są ukryte dla poufności:Otrzymuj nazwy węzłów dziecka w Firebase bez uzyskiwania ich dzieci również w odpowiedzi Firebase?

enter image description here

Próbuję uzyskać listę identyfikatorów filmów (podkreśla na czerwono)

mogę tylko uzyskać wszystkie węzły, a następnie wykryć ich nazwy i zapisać je w tablicy!
Ale to powoduje niską wydajność; ponieważ dataSnapshot z bazy Firebase jest bardzo duże w moim przypadku, więc chcę uniknąć pobierania wszystkich treści węzłów, a następnie przerzucać je w pętli, aby uzyskać identyfikatory, muszę tylko pobrać tylko identyfikatory, tj. bez ich elementów zagnieżdżonych.

Oto mój kod:

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(); 
      } 
     ); 

    } 
); 

Jak mogę pobierać tylko identyfikatory uniknąć dużo transferu danych i uniknąć pętli nad danymi retrived uzyskać identyfikatory? czy istnieje sposób na bezpośrednie pobranie tych identyfikatorów?

Odpowiedz

10

AKTUALIZACJA: W interfejsie API REST istnieje teraz polecenie shallow, które pobiera tylko klucze do ścieżki. To nie zostało jeszcze dodane do pakietów SDK.

W Firebase nie można uzyskać listy nazw węzłów bez pobierania danych poniżej. Jeszcze nie tak. Problemy z wydajnością można rozwiązać poprzez normalizację.

Zasadniczo celem jest podzielenie danych na części eksploatacyjne. Przechowuj listę kluczy wideo za pomocą kilku pól meta, takich jak tytuł itp., W jednej ścieżce i przechowuj treści zbiorcze w innym miejscu. Na przykład:

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

Aby dowiedzieć się więcej o denormalizing, sprawdź ten artykuł: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

+1

hej @Kato jest jakieś plany, aby dodać 'shallow' do SDK? –

+0

Brak. Czy używasz narzędzia, które nie może wysłać żądania HTTP? Jeśli jest to niepraktyczne, możesz zapisać listę identyfikatorów w ścieżce sep dla odniesienia SDK. Zobacz aktualizacje wielościeżkowe. – Kato

5

To jest trochę stary i pewnie już wiecie, ale w przypadku, gdy ktoś inny przyjdzie. Można to zrobić za pomocą połączenia REST API, trzeba tylko ustawić parametr shallow=true

oto documentation

+0

To bardzo przydatne, nie było dostępne w czerwcu 2013 r., Wielkie dzięki za udostępnienie tej aktualizacji! –

+0

można to zrobić za pomocą api web? – vinesh

+0

Nie sądzę, że wprowadzono płytkie tylko w tym październiku na REST – webduvet

Powiązane problemy