Heim > Java > javaLernprogramm > Wie wählt man effizient zufällige Produkte aus einer großen Firebase-Datenbank in Node aus?

Wie wählt man effizient zufällige Produkte aus einer großen Firebase-Datenbank in Node aus?

Barbara Streisand
Freigeben: 2024-10-29 06:12:31
Original
326 Leute haben es durchsucht

How to Efficiently Select Random Products from a Large Firebase Database in Node?

Eindeutige Zufallsprodukte in Node Firebase abrufen

Um ein einzelnes Zufallsprodukt aus einer Knotendatenbank mit über 1000 Datensätzen abzurufen, ziehen Sie zwei Ansätze in Betracht: den klassische Lösung und ein denormalisierter Ansatz.

Klassische Lösung

<br>ListView listView = (ListView) findViewById(R.id.list_view);<br>ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, randomProductList);<br>listView.setAdapter(arrayAdapter);<br>DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); <br>DatabaseReference productsRef = rootRef.child("products"); //Aufruf zu .child("products") hinzugefügt<br>ValueEventListener valueEventListener = new ValueEventListener() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    List<String> productList = new ArrayList<>();
    for(DataSnapshot ds : dataSnapshot.getChildren()) {
        String name = ds.child("name").getValue(String.class);
        productList.add(name);
    }

    int productListSize = productList.size();
    List<String> randomProductList = new ArrayList<>();

    randomProductList.add(new Random().nextInt(productListSize)); //Add the random product to list
    arrayAdapter.notifyDatasetChanged();
}

@Override
public void onCancelled(DatabaseError databaseError) {
    Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
}
Nach dem Login kopieren

};
productsRef.addListenerForSingleValueEvent(valueEventListener);

Dieser Ansatz durchläuft alle Produktknoten, fügt ihre Namen einer Liste hinzu und wählt zufällig einen aus.

Denormalisierter Ansatz

Erstellen Sie einen Separater „productIds“-Knoten, um das Herunterladen großer Datenmengen zu vermeiden:

<br>Firebase-root<br> |<br> --- products<br> |     |<br> |     --- productIdOne<br> |     |      |<br> |     |      --- //Details<br> |     |<br> |     --- productIdTwo<br> |            |<br> |            --- //Details<br> |      <br> --- Produkt-IDs</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">      |
      --- productIdOne: true
      |
      --- productIdTwo: true
      |
      --- //And so on
Nach dem Login kopieren

<br>DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();<br> DatabaseReference productIdsRef = rootRef.child("productIds");<br>ValueEventListener valueEventListener = new ValueEventListener() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    List<String> productIdsList = new ArrayList<>();
    for(DataSnapshot ds : dataSnapshot.getChildren()) {
        String productId = ds.getKey();
        productIdsList.add(productId);
    }

    int productListSize = productList.size();
    List<String> randomProductList = new ArrayList<>();

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

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

@Override
public void onCancelled(DatabaseError databaseError) {
    Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
}
Nach dem Login kopieren

};
productIdsRef.addListenerForSingleValueEvent(valueEventListener);

Dieser Ansatz fragt den Knoten „productIds“ ab, um eine zufällige Produkt-ID zu erhalten, und fragt dann den Knoten „products“ nach spezifischen Details ab.

Das obige ist der detaillierte Inhalt vonWie wählt man effizient zufällige Produkte aus einer großen Firebase-Datenbank in Node aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Warum gibt Java für ein langes Literal den Fehler „Außerhalb des Bereichs“ aus, obwohl die Variable als lang deklariert ist? Nächster Artikel:Sollten Sie Ihre Eclipse-Projektkonfigurationsdateien einer Versionskontrolle unterziehen?
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
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage