Maison  >  Article  >  Java  >  Comment récupérer efficacement un seul produit aléatoire à partir d'une grande collection Firebase dans Node ?

Comment récupérer efficacement un seul produit aléatoire à partir d'une grande collection Firebase dans Node ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 23:41:30814parcourir

How to Efficiently Retrieve a Single Random Product from a Large Firebase Collection in Node?

Comment récupérer un produit aléatoire unique à partir d'une collection Node Firebase

Introduction au problème :

Dans Node Firebase, vous disposez d'une collection de produits et doivent afficher un seul produit aléatoire. Bien que vous puissiez potentiellement récupérer tous les produits puis en sélectionner un au hasard, cette approche devient inefficace si vous avez une grande collection.

Solution 1 : Approche classique

Pour éviter de télécharger tous les produits, vous pouvez utiliser l'approche classique :

  1. Parcourez la collection de produits et enregistrez tous les noms de produits dans une liste.
  2. Générez un index aléatoire pour sélectionner et récupérer le produit correspondant.

Code :

<code class="js">const productsRef = FirebaseDatabase.getInstance().getReference().child("products");
const productNames = [];

productsRef.once('value').then(snapshot => {
  snapshot.forEach(child => {
    productNames.push(child.child("name").val());
  });

  const randomIndex = Math.floor(Math.random() * productNames.length);
  const selectedProduct = productNames[randomIndex];

  // Display the selected product
  console.log(selectedProduct);
});</code>

Solution 2 : Approche dénormalisée

Pour les collections plus importantes, une approche dénormalisée est recommandée :

  1. Créez un nœud "productIds" avec les ID de tous les produits.
  2. Récupérez un ID de produit aléatoire à partir du nœud "productIds".
  3. Utilisez l'ID de produit pour interroger le nœud "products" et récupérer les détails du produit correspondant.

Structure de la base de données :

<code class="json">Firebase-root
   |
   --- products
   |     |
   |     --- productIdOne
   |     |      |
   |     |      --- //details
   |     |
   |     --- productIdTwo
   |            |
   |            --- //details
   |      
   --- productIds
          |
          --- productIdOne: true
          |
          --- productIdTwo: true
          |
          --- //And so on</code>

Code :

<code class="js">const productIdsRef = FirebaseDatabase.getInstance().getReference().child("productIds");
const randomId = Math.floor(Math.random() * Object.keys(productIdsRef).length);
const selectedId = Object.keys(productIdsRef)[randomId];

const productsRef = FirebaseDatabase.getInstance().getReference().child("products");
const selectedProductRef = productsRef.child(selectedId);

selectedProductRef.once('value').then(snapshot => {
  // Display the selected product
  console.log(snapshot.val());
});</code>

Les deux approches récupèrent efficacement un produit aléatoire à partir d’une grande collection tout en minimisant le transfert de données. Choisissez l'approche qui correspond le mieux à votre cas d'utilisation spécifique et à vos exigences de performances.

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