Heim > Java > javaLernprogramm > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-10-28 02:06:02
Original
629 Leute haben es durchsucht

 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
Nach dem Login kopieren

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>
Nach dem Login kopieren

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
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!