首頁 > Java > java教程 > 如何在 Node 中從大型 Firebase 資料庫中有效地選擇隨機產品?

如何在 Node 中從大型 Firebase 資料庫中有效地選擇隨機產品?

Barbara Streisand
發布: 2024-10-29 06:12:31
原創
327 人瀏覽過

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

在Node Firebase 中取得唯一的隨機產品

要從超過1000 筆記錄的節點資料庫中擷取單一隨機產品,請考慮兩種方法:經典解決方案和非規範化方法。

經典解決方案

<br>ListView listView = (ListView) findViewById(R.id.list_view);<br>ArrayAdapter arrayAdter (context, android.R.layout.simple_list_item_1, randomProductList);<br>listView.setAdapter(arrayAdapter);<br>DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); child("products"); // 新增了對.child("products")<br>ValueEventListener valueEventListener = new ValueEventListener() {<br><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!
}
登入後複製
};

productsv ;
pre>

此方法循環遍歷所有產品節點,將其名稱加入清單中,然後隨機選擇一個。

非規範化方法

建立一個單獨的「productIds」節點以避免下載大量資料:

<p>Firebase-root-root <br> |<br> --- products<br> | |<br> | ---productIdOne<br> | | |<br> | | --- //詳細資料<br> |<br> | ---productIdTwo<br> | |<br> | --- //詳細資料<br> | <br> --- ProductIds<br></p><pre class="brush:php;toolbar:false">      |
      --- productIdOne: true
      |
      --- productIdTwo: true
      |
      --- //And so on
登入後複製




DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();<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!
}
登入後複製
DatabaseReference ProductIdsRef = rootRef.child("productIds");ValueListList 🎜>

};
productIdsRef.addListenerForSingleValueEvent(valueEventListener);
pre>

此方法查詢「productIds」節點以取得隨機產品ID,然後以「products」節點查詢以「productIds」節點查詢隨機產品獲取具體詳細資訊。

以上是如何在 Node 中從大型 Firebase 資料庫中有效地選擇隨機產品?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板