ホームページ >Java >&#&チュートリアル >Node.js で大規模な Firebase データセットからランダムな製品を効率的に取得する方法

Node.js で大規模な Firebase データセットからランダムな製品を効率的に取得する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 02:06:02747ブラウズ

 How to Efficiently Retrieve a Random Product from a Large Firebase Dataset in Node.js?

Node Firebase で一意のランダムなプロダクトを取得する方法

Firebase は柔軟なデータ構造を提供し、データを階層的に保存できます。シナリオによっては、膨大な数のレコードがある場合でも、必要なのは一意でランダムなレコードが 1 つだけであることです。この記事では、Node Firebase でこれを実現するための 2 つのアプローチについて説明します。

従来のアプローチ: すべてのレコードをダウンロードする

データベース構造が次のようなものであると仮定します。

Firebase-root
   |
   --- products
         |
         --- productIdOne
         |      |
         |      --- name: "gjwj"
         |      |
         |      --- category: "hreggrrg"
         |      |
         |      --- location: "vjhiwehifwe"
         |      |
         |      --- price: 44
         |      |
         |      --- color: "fassaf"
         |
         --- productIdTwo
         |      |
         |      --- name: "uygfwh"
         |      |
         |      --- category: "hhhjwwwom"
         |      |
         |      --- location: "pervrr"
         |      |
         |      --- price: 33
         |      |
         |      --- color: "yrtrr"
         |
         --- //And so on

ランダムな製品を取得するには、次のコードを実装できます。

<code class="javascript">var listView = (ListView) findViewById(R.id.list_view);
var arrayAdapter = new ArrayAdapter(context, android.R.layout.simple_list_item_1, randomProductList);
listView.setAdapter(arrayAdapter);
var rootRef = FirebaseDatabase.getInstance().getReference();
var productsRef = rootRef.child("products");
var valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        var productList = new ArrayList();
        for(var ds : dataSnapshot.getChildren()) {
            var name = ds.child("name").getValue(String.class);
            productList.add(name);
        }

        var productListSize = productList.size();
        var randomProductList = new ArrayList();

        randomProductList.add(new Random().nextInt(productListSize)); 
        arrayAdapter.notifyDatasetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
    }
};
productsRef.addListenerForSingleValueEvent(valueEventListener);</code>

すべての製品を反復処理することで、リストを作成し、そのリスト内にランダムなインデックスを生成できます。は、選択した製品を表します。

最適化されたアプローチ: フルレコードのダウンロードを回避

データの取得を最小限に抑えるために、次のようにデータベースを再構築できます:

Firebase-root
   |
   --- products
   |     |
   |     --- productIdOne
   |     |      |
   |     |      --- //details
   |     |
   |     --- productIdTwo
   |            |
   |            --- //details
   |      
   --- productIds
          |
          --- productIdOne: true
          |
          --- productIdTwo: true
          |
          --- //And so on

ここでは、productIds という別のノードを作成します。このノードには、製品の ID のみが含まれます。ランダムな製品を取得するには:

<code class="javascript">var rootRef = FirebaseDatabase.getInstance().getReference();
var productIdsRef = rootRef.child("productIds");
var valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        var productIdsList = new ArrayList();
        for(var ds : dataSnapshot.getChildren()) {
            var productId = ds.getKey();
            productIdsList.add(productId);
        }

        var productListSize = productList.size();
        var randomProductList = new ArrayList(););

        var productIdRef = rootRef.child("products").child(productIdsList.get(new Random().nextInt(int productListSize));
        var eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                var name = dataSnapshot.child("name").getValue(String.class);
                Log.d("TAG", name);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.d(TAG, "Error: ", task.getException()); 
            }
        };
        productIdRef.addListenerForSingleValueEvent(eventListener);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Error: ", task.getException()); 
    }
};
productIdsRef.addListenerForSingleValueEvent(valueEventListener);</code>

最初に製品 ID を取得すると、特定の製品をクエリできるため、より効率的で的を絞った取得プロセスが実現します。

以上がNode.js で大規模な Firebase データセットからランダムな製品を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。