首页 > Java > java教程 > 正文

如何在 Node 中从大型 Firebase 数据库中高效选择随机产品?

Barbara Streisand
发布: 2024-10-29 06:12:31
原创
290 人浏览过

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 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"); // 添加了对 .child("products")<br>ValueEventListener valueEventListener = new ValueEventListener() {<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>

此方法循环遍历所有产品节点,将其名称添加到列表中,然后随机选择一个。

非规范化方法

创建一个单独的“productIds”节点以避免下载大量数据:

<br>Firebase-root<br> |<br> --- products<br> |     |<br> |     ---productIdOne<br> |     |      |<br> |     |      --- //详细信息<br> |     |<br> |     ---productIdTwo<br> |            |<br> |            --- //详细信息<br> |      <br> --- ProductIds<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() {<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>

此方法查询“productIds”节点以获取随机产品 ID,然后查询“products”节点以获取具体详细信息。

以上是如何在 Node 中从大型 Firebase 数据库中高效选择随机产品?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板