Rumah >Java >javaTutorial >Bagaimana untuk Memilih Produk Rawak dengan Cekap daripada Pangkalan Data Firebase Besar dalam Node?

Bagaimana untuk Memilih Produk Rawak dengan Cekap daripada Pangkalan Data Firebase Besar dalam Node?

Barbara Streisand
Barbara Streisandasal
2024-10-29 06:12:31308semak imbas

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

Mendapatkan Produk Rawak Unik dalam Node Firebase

Untuk mendapatkan semula produk rawak tunggal daripada pangkalan data nod melebihi 1000 rekod, pertimbangkan dua pendekatan: penyelesaian klasik dan pendekatan tidak normal.

Penyelesaian Klasik


ListView listView = (ListView) findViewById(R.id.list_view);
ArrayAdapter arrayAdapter = ArrayAdapter baharu<>(context, android.R.layout.simple_list_item_1, randomProductList);
listView.setAdapter(arrayAdapter);
DatabaseReference rootRef = FirebaseDatabase.get
DatabaseReference productsRef = rootRef.child("products"); //Menambahkan panggilan ke .child("products")
ValueEventListener valueEventListener = new ValueEventListener() {

@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(value
);< pra>

Pendekatan ini berpusing melalui semua nod produk, menambahkan nama mereka pada senarai dan memilih satu secara rawak.

Pendekatan Tidak Normal

Buat pisahkan nod "productIds" untuk mengelakkan memuat turun sejumlah besar data:

<br>Firebase-root<br> |<br> --- produk<br> |     |<br> |     --- productIdOne<br> |     |      |<br> |     |      --- //butiran<br> |     |<br> |     --- productIdTwo<br> |            |<br> |            --- //butiran<br> |      <br> --- productIds</p>
<pre class="brush:php;toolbar:false">      |
      --- productIdOne: true
      |
      --- productIdTwo: true
      |
      --- //And so on


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference productIdsRef = rootRef.child("productIds");
ValueEventListener valueEventListener = new ValueEventListener() {

@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.addListenerForSingleVa);&🎜 pra>

Pendekatan ini menanyakan nod "productIds" untuk mendapatkan ID produk rawak, kemudian menanyakan nod "products" untuk butiran khusus.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Produk Rawak dengan Cekap daripada Pangkalan Data Firebase Besar dalam Node?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn