Maison > Java > javaDidacticiel > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-28 23:41:30
original
911 Les gens l'ont consulté

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

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

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

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal