Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mendapatkan Produk Rawak dengan Cekap daripada Set Data Firebase Besar dalam Node.js?

Bagaimana untuk Mendapatkan Produk Rawak dengan Cekap daripada Set Data Firebase Besar dalam Node.js?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 02:06:02619semak imbas

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

Bagaimana untuk Mendapatkan Produk Rawak Unik dalam Node Firebase?

Firebase menyediakan struktur data yang fleksibel, membolehkan anda menyimpan data dalam cara hierarki. Dalam sesetengah senario, anda mungkin mempunyai sejumlah besar rekod, tetapi anda hanya memerlukan satu rekod unik dan rawak. Artikel ini akan membimbing anda melalui dua pendekatan untuk mencapai perkara ini dalam Node Firebase.

Pendekatan Klasik: Memuat Turun Semua Rekod

Dengan mengandaikan struktur pangkalan data anda menyerupai yang berikut:

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

Untuk mendapatkan semula produk rawak, anda boleh melaksanakan kod berikut:

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

Dengan mengulangi semua produk, anda boleh membuat senarai dan menjana indeks rawak dalam senarai itu, yang mewakili produk yang dipilih.

Pendekatan Dioptimumkan: Mengelakkan Muat Turun Rekod Penuh

Untuk meminimumkan pengambilan data, anda boleh menyusun semula pangkalan data anda seperti berikut:

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

Di sini, anda membuat nod berasingan yang dipanggil productIds, yang mengandungi hanya ID produk anda. Untuk mendapatkan semula produk rawak:

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

Dengan mendapatkan semula ID produk dahulu, anda boleh membuat pertanyaan untuk produk tertentu, menghasilkan proses mendapatkan semula yang lebih cekap dan disasarkan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Produk Rawak dengan Cekap daripada Set Data Firebase Besar dalam Node.js?. 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