>  기사  >  Java  >  Node.js의 대규모 Firebase 데이터 세트에서 무작위 제품을 효율적으로 검색하는 방법은 무엇입니까?

Node.js의 대규모 Firebase 데이터 세트에서 무작위 제품을 효율적으로 검색하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 02:06:02619검색

 How to Efficiently Retrieve a Random Product from a Large Firebase Dataset in Node.js?

Node Firebase에서 고유한 무작위 제품을 검색하는 방법

Firebase는 유연한 데이터 구조를 제공하므로 데이터를 계층적 방식으로 저장할 수 있습니다. 일부 시나리오에서는 방대한 수의 레코드가 있을 수 있지만 고유한 임의 레코드는 하나만 필요합니다. 이 문서에서는 Node Firebase에서 이를 달성하기 위한 두 가지 접근 방식을 안내합니다.

기본 접근 방식: 모든 레코드 다운로드

데이터베이스 구조가 다음과 유사하다고 가정합니다.

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

임의의 제품을 검색하려면 다음 코드를 구현할 수 있습니다.

<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>

모든 제품을 반복하여 목록을 생성하고 해당 목록 내에서 임의의 인덱스를 생성할 수 있습니다. 선택한 제품을 나타냅니다.

최적화된 접근 방식: 전체 레코드 다운로드 방지

데이터 검색을 최소화하려면 다음과 같이 데이터베이스를 재구성할 수 있습니다.

Firebase-root
   |
   --- products
   |     |
   |     --- productIdOne
   |     |      |
   |     |      --- //details
   |     |
   |     --- productIdTwo
   |            |
   |            --- //details
   |      
   --- productIds
          |
          --- productIdOne: true
          |
          --- productIdTwo: true
          |
          --- //And so on

여기에서는 제품 ID만 포함하는 productIds라는 별도의 노드를 만듭니다. 임의의 제품을 검색하려면:

<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>

먼저 제품 ID를 검색하면 특정 제품에 대해 쿼리할 수 있으므로 보다 효율적이고 대상이 명확한 검색 프로세스가 가능해집니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.