programing

이 Firestore 쿼리에 인덱스가 필요한 이유는 무엇입니까?

oldcodes 2023. 7. 13. 21:05
반응형

이 Firestore 쿼리에 인덱스가 필요한 이유는 무엇입니까?

질문이 있습니다.where()등호 연산자가 있는 방법 및 그 다음에orderBy()방법과 나는 그것이 왜 색인을 필요로 하는지 알 수 없습니다.where 메서드는 개체(맵)에서 값을 확인하고 순서는 숫자를 사용합니다.

문서에는 다음과 같이 나와 있습니다.

범위 비교(<, <=, >, >=)가 있는 필터가 있는 경우, 첫 번째 주문은 동일한 필드에 있어야 합니다.

그래서 저는 평등 필터가 괜찮다고 생각했을 것입니다.

다음은 내 쿼리 코드입니다.

this.afs.collection('posts').ref
.where('tags.' + this.courseID,'==',true)
.orderBy("votes")
.limit(5)
.get().then(snap => {
  snap.forEach(doc => {
    console.log(doc.data());
  });
});

다음은 데이터베이스 구조의 예입니다.

이 Firestore 쿼리에 인덱스가 필요한 이유는 무엇입니까?

Cloud Firestore의 쿼리는 매우 빠르며, 이는 Firestore가 문서에 있는 모든 필드에 대한 인덱스를 자동으로 만들기 때문입니다.따라서 범위 비교를 사용하여 필터링하기만 하면 Firestore에서 필요한 인덱스를 자동으로 생성합니다.또한 결과를 정렬하려면 다른 인덱스가 필요합니다.이런 종류의 색인은 자동으로 작성되지 않습니다.사용자가 직접 만들어야 합니다.이 작업은 Firebase 콘솔에서 수동으로 생성하여 수행할 수 있습니다. 그렇지 않으면 로그에서 다음과 같은 메시지를 확인할 수 있습니다.

FAILED_PRECONDITION: The query requires an index. You can create it here: ...

해당 링크를 클릭하거나 URL을 복사하여 웹 브라우저에 붙여넣기만 하면 색인이 자동으로 만들어집니다.

따라서 Firestore에는 인덱스가 필요하므로 매우 빠른 쿼리를 실행할 수 있습니다.

인덱스는 단순히 데이터베이스 인벤토리 또는 위치에 대한 기록입니다.그리고 각 인덱스는 특정 항목의 특정 인벤토리입니다. 예를 들어, 몇 개의 인덱스가propertyX필드가 컬렉션에 존재하고 필드 값이 무엇인지 정렬합니다(정렬된다는 사실이 중요함).

이 인벤토리가 존재하지 않는 경우, 다음 위치에서 문서를 쿼리합니다.propertyX이라someValue기계는 (1) 어떤 문서가 포함되어 있는지 결정하기 위해 전체 컬렉션에 걸쳐 반복해야 합니다.propertyX그리고 (2) 어떤 문서가 포함하고 있는지.propertyX와 동등한.someValue쿼리가 수행될 때 쿼리 속성의 인덱스를 유지합니다.propertyX그 기계는 바로 갈 수 있습니다.propertyX동일한 모든 문서의 위치 색인 및 수집someValue그런 다음 컬렉션에서 문서를 가져와 반환합니다.기계는 문서가 어디에 있는지 알기 위해 컬렉션을 터치할 필요가 없을 뿐만 아니라 항상 순서가 있기 때문에 전체 인덱스에 대해 반복할 필요도 없습니다.

인덱스는 수집 크기가 Firestore 쿼리의 성능에 영향을 미치지 않는 이유이며 쿼리된 속성만 인덱싱하면 되는 이유입니다.

언급URL : https://stackoverflow.com/questions/53790175/why-does-this-firestore-query-require-an-index

반응형