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
Barbara StreisandOriginal
2024-10-29 06:12:31353Durchsuche

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

};
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>
<pre class="brush:php;toolbar:false">      |
      --- productIdOne: true
      |
      --- productIdTwo: true
      |
      --- //And so on

<br>DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();<br> DatabaseReference productIdsRef = rootRef.child("productIds");<br>ValueEventListener valueEventListener = new ValueEventListener() {</p>
<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!
}

};
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!

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