필터
Bigtable에서 데이터를 읽을 때 특정 행 또는 행 범위를 읽을 수 있습니다. 하지만 모든 행의 모든 데이터가 항상 필요한 것은 아닙니다. row key에 특정 값이 포함된 행이나 특정 column family 내의 셀만 필요할 수 있습니다.
읽기 요청의 결과를 제한하려면 요청에 필터를 포함하세요. 필터는 응답이 전송되기 전에 데이터에 적용되므로 반환되는 데이터의 양이 줄어듭니다. 따라서 필터를 사용하면 네트워크 비용이 절감되고 처리 속도가 빨라집니다. 이 페이지에서는 Bigtable 필터의 작동 방식과 사용 가능한 필터 목록을 설명합니다.
각 필터의 세부정보와 코드 샘플은 필터 예시를 참조하세요.
필터의 작동 방식
읽기 요청에 필터가 포함되어 있으면 Bigtable은 테이블에서 행 또는 행 범위를 검색합니다. Bigtable은 검색하는 입력 행마다 필터를 사용하여 행을 평가한 다음 필터 결과를 기반으로 출력 행을 생성합니다.
Bigtable은 다음 섹션에 설명된 대로 여러 유형의 필터를 제공합니다. 기본 필터는 제한과 수정이라는 두 가지 범주로 나뉩니다. 기본 필터를 구성 필터로 결합할 수 있습니다.
대부분의 경우 필터는 row key, 행 범위 또는 필터를 적용해야 하는 행 수를 지정하지 않는 한 모든 행에 적용됩니다. 예외적으로 row key 정규식 필터는 정규식이 고정된 프리픽스인 경우 행 범위를 제한할 수 있습니다. 일반적으로 전체 테이블 검색이 느려지지 않도록 하려면 항상 필터 행을 지정합니다.
제한 필터
제한 필터는 특정 기준과 일치하는지 여부에 따라 응답에 포함될 행 또는 셀을 제어합니다. 예를 들어 row key가 정규 표현식과 일치하는 행만 응답에 포함되어야 한다거나 특정 column family의 셀만 필요하다고 지정할 수 있습니다.
제한 필터 중 다수는 출력 행에서 셀을 제외할 수 있습니다. 모든 셀이 제외된 출력 행은 응답에 포함되지 않습니다.
제한 필터의 전체 목록은 필터 요약을 참조하세요.
수정 필터
수정 필터는 개별 셀의 데이터 또는 메타데이터에 영향을 줍니다.
Bigtable은 다음과 같은 수정 필터를 제공합니다.
값 제거 필터는 각 셀의 값을 빈 문자열로 바꿉니다. 이 필터는 기준과 일치하는 행의 데이터가 아니라 그 행의 수 또는 row key 목록만 필요할 때 유용합니다.
라벨 적용 필터는 각 셀에 라벨을 적용하여 응답에서 각 셀을 생성한 필터를 식별합니다. 애플리케이션은 이 라벨을 사용하여 클라이언트 측에서 추가 필터링을 수행할 수 있습니다.
구성 필터
구성 필터를 사용하면 여러 기본 필터를 하나로 결합하여 단일 읽기 요청에 둘 이상의 필터를 적용할 수 있습니다.
예를 들어 서버의 CPU 사용량 데이터를 가져오려면 필터 하나를 사용하여 row key가 SERVER
로 시작하는 행만 포함한 다음, 두 번째 필터를 사용하여 CPU
column family 내의 셀만 포함할 수 있습니다.
Bigtable은 다음과 같은 구성 필터를 제공합니다.
- 체인은 각 입력 행에 필터 시퀀스를 적용하고 출력 행을 반환합니다. 체인 필터는 논리곱을 사용하는 것과 같습니다.
- 인터리브는 여러 필터를 통해 각 입력 행을 전송한 다음 입력 행의 모든 필터 결과를 단일 출력 행으로 결합합니다. 인터리브 필터는 논리합을 사용하는 것과 같습니다.
- 조건은 입력 행에 가능한 두 필터 중 하나를 적용하여 출력 행을 생성합니다. 입력 행에 조건자 필터를 적용한 다음 조건자 필터의 출력 행에 셀이 포함되어 있는지 확인하여 조건 필터가 선택됩니다.
필터 및 성능
필터를 사용하면 실제로 필요한 데이터만 검색할 수 있습니다. 따라서 필터 사용을 통해 애플리케이션으로 전송되는 데이터의 양을 줄일 수 있습니다.
하지만 필터가 모든 성능 문제의 만능 해법은 아닙니다. 일반적으로 필터는 요청 전송과 응답 수신 간의 지연 시간을 줄이기 위해서가 아니라 처리량 효율을 제어하기 위해 사용해야 합니다. 필터를 적절히 사용하면 읽기 성능 개선 전략에서 효율성 측면을 개선할 수 있습니다.
특히 조건 필터는 다른 필터보다 훨씬 느리기 때문에 지연 시간을 늘릴 수 있습니다. 읽기 요청이 성능에 매우 민감하다면 요청에 조건을 사용하지 마세요.
필터 요약
다음 표에는 Bigtable이 제공하는 필터와 각 필터의 세부정보 및 코드 샘플 링크가 나와 있습니다.
제한 필터 | |
---|---|
모두 차단 | 셀을 내보내지 않습니다. 주로 디버깅에 유용합니다. |
열당 셀 한도 | 가장 최근 버전의 열 N개만 행에 포함합니다. |
행당 셀 한도 | 행의 처음 N개 셀만 포함합니다. |
행당 셀 오프셋 | 행에서 처음 N개의 셀을 생략합니다. |
column family 정규식 | column family가 RE2 정규 표현식과 일치하는 셀만 포함합니다. |
column qualifier 정규식 | column qualifier가 정규 표현식과 일치하는 셀만 포함합니다. |
열 범위 | column qualifier가 특정 범위 내에 있는 특정 column family의 셀만 포함합니다. |
모두 통과 | 모든 입력 셀을 내보냅니다. 주로 디버깅에 유용합니다. |
row key 정규식 | row key가 정규 표현식과 일치하는 셀만 포함합니다. |
행 샘플 | 무작위 행 샘플을 검색합니다. |
싱크 | 최종 출력 행에 셀을 포함하고 후속 필터에 의해 셀이 수정 또는 삭제되지 않도록 합니다. |
타임스탬프 범위 | 타임스탬프가 특정 범위 내에 있는 셀만 포함합니다. |
값 범위 | 값이 특정 범위 내에 있는 셀만 포함합니다. |
값 정규식 | 값이 정규 표현식과 일치하는 셀만 포함합니다. |
수정 필터 | |
---|---|
라벨 적용 | 모든 셀에 라벨을 추가합니다. |
값 제거 | 각 셀 값으로 빈 문자열을 반환합니다. |
구성 필터 | |
---|---|
체인 | 여러 필터를 순서대로 적용합니다. |
조건 | 가능한 두 필터 중 하나를 행에 적용합니다. |
인터리브 | 여러 필터의 출력 행을 단일 출력 행으로 결합합니다. |