Maison >Java >javaDidacticiel >Comment sélectionner efficacement des produits aléatoires à partir d'une grande base de données Firebase dans 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> <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);
pre>
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> <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);
pre>
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!