14

私はfirebaseに次の階層を持っています.一部のデータは機密性のために隠されています:

ここに画像の説明を入力

動画 ID のリストを取得しようとしています (赤の下線)

すべてのノードを取得し、それらの名前を検出して配列に格納することしかできません!
ただし、これによりパフォーマンスが低下します。私の場合、dataSnapshotfrom firebase は非常に大きいため、すべてのノードのコンテンツを取得することを避け、それらをループして ID を取得したいので、ID のみを取得する必要があります。つまり、ネストされた要素はありません。

これが私のコードです:

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

    }
);

大量のデータ転送を回避し、取得したデータをループして ID を取得することを避けるために、ID のみを取得するにはどうすればよいですか? これらの ID を直接取得する方法はありますか?

4

2 に答える 2

10

更新:shallowパスのキーのみをフェッチするコマンドが REST API に追加されました。これはまだ SDK に追加されていません。

Firebase では、下のデータを取得しないとノード名のリストを取得できません。とにかくまだ。パフォーマンスの問題は、正規化によって解決できます。

基本的に、目標はデータを消費可能なチャンクに分割することです。タイトルなどのいくつかのメタ フィールドで可能なビデオ キーのリストを 1 つのパスに保存し、バルク コンテンツを別の場所に保存します。例えば:

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

非正規化の詳細については、https ://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html の記事をご覧ください。

于 2013-06-20T14:20:50.603 に答える