Maison  >  Article  >  Java  >  Comment récupérer efficacement un produit aléatoire à partir d'un grand ensemble de données Firebase dans Node.js ?

Comment récupérer efficacement un produit aléatoire à partir d'un grand ensemble de données Firebase dans Node.js ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 02:06:02619parcourir

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

Comment récupérer un produit aléatoire unique dans Node Firebase ?

Firebase fournit des structures de données flexibles, vous permettant de stocker des données de manière hiérarchique. Dans certains scénarios, vous pouvez disposer d’un grand nombre d’enregistrements, mais vous n’avez besoin que d’un seul enregistrement unique et aléatoire. Cet article vous guidera à travers deux approches pour y parvenir dans Node Firebase.

Approche classique : téléchargement de tous les enregistrements

En supposant que la structure de votre base de données ressemble à ce qui suit :

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

Pour récupérer un produit aléatoire, vous pouvez implémenter le code suivant :

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

En parcourant tous les produits, vous pouvez créer une liste et générer un index aléatoire au sein de cette liste, qui représente le produit sélectionné.

Approche optimisée : éviter le téléchargement d'enregistrements complets

Pour minimiser la récupération de données, vous pouvez restructurer votre base de données comme suit :

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

Ici, vous créez un nœud distinct appelé productIds, qui contient uniquement les identifiants de vos produits. Pour récupérer un produit aléatoire :

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

En récupérant d'abord l'ID du produit, vous pouvez ensuite rechercher le produit spécifique, ce qui entraîne un processus de récupération plus efficace et ciblé.

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!

Déclaration:
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