> Java > java지도 시간 > 노드의 대규모 Firebase 데이터베이스에서 무작위 제품을 효율적으로 선택하는 방법은 무엇입니까?

노드의 대규모 Firebase 데이터베이스에서 무작위 제품을 효율적으로 선택하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-29 06:12:31
원래의
302명이 탐색했습니다.

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("제품"); //.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);

이 접근 방식은 모든 제품 노드를 반복하고 해당 이름을 목록에 추가한 후 무작위로 하나를 선택합니다.

비정규화된 접근 방식

대량의 데이터 다운로드를 방지하기 위해 별도의 "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);

이 접근 방식은 "productIds" 노드를 쿼리하여 임의의 제품 ID를 얻은 다음 "products" 노드에서 특정 세부 정보를 쿼리합니다.

위 내용은 노드의 대규모 Firebase 데이터베이스에서 무작위 제품을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
이전 기사:변수가 long으로 선언되었음에도 불구하고 Java에서 긴 리터럴에 대해 \"범위를 벗어났습니다\" 오류가 발생하는 이유는 무엇입니까? 다음 기사:Eclipse 프로젝트 구성 파일의 버전을 관리해야 합니까?
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
관련 주제
더>
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿