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("제품"); //.child("products")<br>ValueEventListener에 대한 호출 추가 valueEventListener = new ValueEventListener() {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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() {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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" 노드에서 특정 세부 정보를 쿼리합니다.
위 내용은 노드의 대규모 Firebase 데이터베이스에서 무작위 제품을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!