Heim  >  Artikel  >  Java  >  Wie kann ich in Node.js effizient ein zufälliges Produkt aus einem großen Firebase-Datensatz abrufen?

Wie kann ich in Node.js effizient ein zufälliges Produkt aus einem großen Firebase-Datensatz abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 02:06:02708Durchsuche

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

Wie rufe ich ein eindeutiges Zufallsprodukt in Node Firebase ab?

Firebase bietet flexible Datenstrukturen, die es Ihnen ermöglichen, Daten hierarchisch zu speichern. In einigen Szenarien verfügen Sie möglicherweise über eine große Anzahl von Datensätzen, benötigen jedoch nur einen einzigen eindeutigen und zufälligen Datensatz. Dieser Artikel führt Sie durch zwei Ansätze, um dies in Node Firebase zu erreichen.

Klassischer Ansatz: Herunterladen aller Datensätze

Angenommen, Ihre Datenbankstruktur ähnelt der folgenden:

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

Um ein zufälliges Produkt abzurufen, können Sie den folgenden Code implementieren:

<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>

Indem Sie alle Produkte durchlaufen, können Sie eine Liste erstellen und einen zufälligen Index innerhalb dieser Liste generieren stellt das ausgewählte Produkt dar.

Optimierter Ansatz: Vermeidung des vollständigen Datensatz-Downloads

Um den Datenabruf zu minimieren, können Sie Ihre Datenbank wie folgt umstrukturieren:

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

Hier erstellen Sie einen separaten Knoten namens „productIds“, der nur die IDs Ihrer Produkte enthält. So rufen Sie ein zufälliges Produkt ab:

<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>

Indem Sie zuerst die Produkt-ID abrufen, können Sie dann nach dem spezifischen Produkt fragen, was zu einem effizienteren und gezielteren Abrufprozess führt.

Das obige ist der detaillierte Inhalt vonWie kann ich in Node.js effizient ein zufälliges Produkt aus einem großen Firebase-Datensatz abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn