Rumah > Java > javaTutorial > teks badan

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

Mary-Kate Olsen
Lepaskan: 2024-10-28 02:06:02
asal
629 orang telah melayarinya

 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
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!