2013-06-20 28 views
13

Tôi đã sau phân cấp trên căn cứ hỏa lực, một số dữ liệu được ẩn về bảo mật:Nhận tên của các nút con của Firebase mà không cần nhận con của họ trong phản hồi Firebase?

enter image description here

Tôi đang cố gắng để có được một danh sách các video ID (nhấn mạnh bằng màu đỏ)

tôi chỉ có thể nhận tất cả các nút, sau đó phát hiện tên của chúng và lưu trữ chúng trong một mảng!
Nhưng điều này gây ra hiệu suất thấp; bởi vì dataSnapshot từ firebase rất lớn trong trường hợp của tôi, vì vậy tôi muốn tránh truy xuất tất cả nội dung của các nút rồi lặp lại chúng để nhận ID, tôi chỉ cần truy xuất ID, tức là không có phần tử lồng nhau của chúng.

Dưới đây là mã của tôi:

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

    } 
); 

Làm thế nào tôi có thể lấy chỉ ID để tránh nhiều truyền dữ liệu và để tránh lặp trên dữ liệu retrived để có được ID? có cách nào để chỉ truy xuất lại các ID này trực tiếp không?

Trả lời

10

CẬP NHẬT: Hiện tại có lệnh shallow trong API REST sẽ chỉ tìm nạp khóa cho đường dẫn. Điều này chưa được thêm vào SDK.

Trong Firebase, bạn không thể có được danh sách tên nút mà không truy xuất dữ liệu bên dưới. Chưa được. Các vấn đề về hiệu suất có thể được giải quyết bằng cách chuẩn hóa.

Về cơ bản, mục tiêu của bạn là chia dữ liệu thành các phần có thể tiêu hao. Lưu trữ danh sách các phím video của bạn, có thể với một vài trường meta như tiêu đề, vv, trong một đường dẫn và lưu trữ nội dung hàng loạt ở một nơi khác. Ví dụ:

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

Để tìm hiểu thêm về denormalizing, kiểm tra bài viết này: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

+1

hey @Kato, là có bất kỳ kế hoạch để thêm 'shallow' SDK? –

+0

Không có. Bạn có đang sử dụng một công cụ không thể thực hiện yêu cầu HTTP không? Nếu điều đó không thực tế, bạn có thể lưu trữ danh sách các id trong đường dẫn sep để tham khảo SDK. Xem cập nhật đa đường dẫn. – Kato

5

Nó là một chút cũ, và có thể bạn đã biết, nhưng trong trường hợp người khác đến cùng. Bạn có thể làm điều này bằng cách sử cuộc gọi REST api, bạn chỉ cần thiết lập các tham số shallow=true

đây là documentation

+0

Điều đó rất hữu ích, nó không có sẵn vào tháng 6 năm 2013, Cảm ơn rất nhiều vì đã chia sẻ bản cập nhật này! –

+0

nó có thể được thực hiện với api web không? – vinesh

+0

Tôi không nghĩ như vậy, họ đã giới thiệu nông chỉ trong tháng mười này cho REST – webduvet

Các vấn đề liên quan