Maison > Java > javaDidacticiel > Comment sélectionner efficacement des produits aléatoires à partir d'une grande base de données Firebase dans Node ?

Comment sélectionner efficacement des produits aléatoires à partir d'une grande base de données Firebase dans Node ?

Barbara Streisand
Libérer: 2024-10-29 06:12:31
original
327 Les gens l'ont consulté

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

Obtention de produits aléatoires uniques dans Node Firebase

Pour récupérer un seul produit aléatoire à partir d'une base de données de nœuds de plus de 1 000 enregistrements, envisagez deux approches : solution classique et approche dénormalisée.

Solution classique

<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"); //Ajout d'un appel à .child("products")<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!
}
Copier après la connexion

};
productsRef.addListenerForSingleValueEvent(valueEventListener);

Cette approche parcourt tous les nœuds de produits, ajoute leurs noms à une liste et en sélectionne un au hasard.

Approche dénormalisée

Créer un nœud "productIds" séparé pour éviter de télécharger de grandes quantités de données :

<br>Firebase-root<br> |<br> --- products<br> |     |<br> |     --- productIdOne<br> |     |      |<br> |     |      --- //détails<br> |     |<br> |     --- productIdTwo<br> |            |<br> |            --- //détails<br> |      <br> --- productIds</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">      |
      --- productIdOne: true
      |
      --- productIdTwo: true
      |
      --- //And so on
Copier après la connexion

<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!
}
Copier après la connexion

};
productIdsRef.addListenerForSingleValueEvent(valueEventListener);

Cette approche interroge le nœud « productIds » pour obtenir un ID de produit aléatoire, puis interroge le nœud « products » pour des détails spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Article précédent:Pourquoi Java génère-t-il une erreur « hors de portée » pour un littéral long alors que la variable est déclarée aussi longue ? Article suivant:Devriez-vous contrôler la version des fichiers de configuration de votre projet Eclipse ?
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal