Cloud Bigtable 읽기

이 페이지에서는 Cloud Bigtable에 보낼 수 있는 읽기 요청의 유형과 성능에 미치는 영향을 설명하고 특정 유형의 쿼리에 대한 몇 가지 권장사항을 제시합니다. 이 페이지를 읽기 전에 Cloud Bigtable 개요를 숙지해야 합니다.

개요

Cloud Bigtable에 대한 읽기 요청은 요청된 행의 콘텐츠를 키 순서로 다시 스트리밍합니다. 즉, 저장된 순서대로 반환됩니다. 응답을 반환한 모든 쓰기를 읽을 수 있습니다.

테이블이 지원하는 쿼리는 사용 사례에 가장 적합한 읽기 유형을 결정하는 데 도움이 됩니다. Cloud Bigtable 읽기 요청은 다음 두 가지 일반 범주로 나뉩니다.

  • 단일 행 읽기
  • 스캔 또는 여러 행 읽기

읽기는 행 수준에서 원자적으로 이루어집니다. 즉, 행에 대한 읽기 요청을 보내면 Cloud Bigtable은 전체 행을 반환하고, 요청이 실패하는 경우 아무 행도 반환하지 않습니다. 부분 행은 특별히 요청하지 않는 한 반환되지 않습니다.

API를 직접 호출하는 대신 Cloud Bigtable 클라이언트 라이브러리를 사용하여 테이블에서 데이터를 읽는 것이 좋습니다. 읽기 요청을 보내는 방법을 보여주는 코드 샘플은 여러 언어로 제공됩니다. 모든 읽기 요청은 ReadRows API를 호출합니다.

단일 행 읽기

row key에 따라 단일 행을 요청할 수 있습니다. 다음 변형에 코드 샘플을 사용할 수 있습니다.

스캔

스캔은 Cloud Bigtable 데이터를 읽는 가장 일반적인 방법입니다. row key 프리픽스를 지정하거나 시작 및 종료 row key를 지정하여 Cloud Bigtable에서 연속된 행 범위 또는 여러 행 범위를 읽을 수 있습니다. 다음 변형에 코드 샘플을 사용할 수 있습니다.

필터링된 읽기

특정 값이나 부분 행을 포함하는 행만 필요할 경우 읽기 요청에 필터를 사용할 수 있습니다. 필터를 사용하면 원하는 데이터를 선택할 수 있습니다.

또한 필터를 사용하면 테이블이 사용 중인 가비지 컬렉션 정책과 읽기가 일치하도록 할 수 있습니다. 이는 타임스탬프가 적용된 새 셀을 기존 열에 자주 쓰는 경우에 특히 유용합니다. 가비지 컬렉션은 만료된 데이터 삭제에 최대 일주일이 걸릴 수 있으므로 필터를 사용하여 데이터를 읽으면 필요한 것보다 많은 데이터를 읽지 않아도 됩니다.

필터 개요는 사용할 수 있는 필터 유형에 대한 자세한 설명을 제공합니다. 필터 사용은 여러 언어로 예시를 보여줍니다.

읽기 및 성능

필터를 사용하는 읽기는 필터가 없는 읽기보다 느리며, CPU 사용률을 높입니다. 반면 반환되는 데이터의 양을 제한하여 사용하는 네트워크 대역폭의 양을 크게 줄일 수 있습니다. 일반적으로 필터는 지연 시간이 아니라 처리량 효율을 제어하기 위해 사용해야 합니다.

읽기 성능을 최적화하려면 다음 전략을 고려하세요.

  1. 행 집합을 최대한 제한합니다. 노드가 스캔해야 하는 행 수를 제한하는 것은 첫 번째 바이트 시간과 전체 쿼리 지연 시간을 개선하는 첫 단계입니다. 행 집합을 제한하지 않으면 Cloud Bigtable은 십중팔구 전체 테이블을 스캔해야 합니다. 따라서 가장 일반적인 쿼리가 이러한 방식으로 작동하도록 스키마를 설계하는 것이 좋습니다.

  2. 행 집합을 제한한 후에 추가 성능 조정을 수행하려면 기본 필터를 추가해 보세요. 열 집합 또는 반환되는 버전 수를 제한해도 일반적으로 지연 시간은 늘어나지 않으며, Cloud Bigtable이 각 행에서 관련 없는 과거 데이터를 더 효율적으로 찾는 데 도움이 될 수도 있습니다.

  3. 처음 두 가지 전략 이후에 읽기 성능을 더 세부적으로 조정하려면 복잡한 필터를 사용하는 것이 좋습니다. 이를 시도해 볼 만한 몇 가지 이유는 다음과 같습니다.

    • 원하지 않는 데이터가 여전히 많이 반환되고 있습니다.
    • 쿼리를 Cloud Bigtable로 푸시하여 애플리케이션 코드를 단순화하려고 합니다.

    다만 큰 값에서 조건, 인터리브 또는 정규식 일치를 요구하는 필터는 스캔된 데이터 대부분을 통과시키는 경우 피해를 입힐 수 있습니다. 이 피해는 클라이언트 측의 대규모 절감 없는 클러스터의 CPU 사용률 증가라는 형태로 나타납니다.

특정 상황의 읽기

큰 행

Cloud Bigtable은 행 크기를 256MB로 제한하지만 실수로 이 최대 크기를 초과할 수 있습니다. 한도보다 커진 행을 읽어야 하는 경우 요청을 페이지로 나누고 cells per row limit 필터cells per row offset 필터를 사용할 수 있습니다. 페이지로 나눈 읽기 요청 사이에 행에 대한 쓰기가 도착하면 읽기가 원자적으로 수행되지 않을 수 있습니다.

역방향 스캔 시뮬레이션

Cloud Bigtable은 HBase와 같이 역방향 스캔을 수행하는 기능을 제공하지 않습니다. 다만 역방향 스캔을 시뮬레이션할 수는 있습니다. 이 기법은 동일한 행과 열에 저장되지 않은 값의 가장 최근 버전을 찾는 경우에 유용합니다.

이 접근 방식에서는 숫자 또는 날짜와 같이 뺄 수 있는 값이 포함된 row key를 만들었다고 가정합니다. 거꾸로 검색하려는 행(X)으로 시작합니다. 먼저 X: X-Y~X 전의 Y 행 몇 개를 검색합니다. 값을 찾을 수 없다면 X-Y*2~X-Y 또는 X-Y*3~X-Y와 같은 다음 행 집합을 검색합니다. 값을 찾을 수 없는 경우 값을 찾을 때까지 다음 행 집합을 계속 검색합니다.

예를 들어 row key가 123ABC#2020-05-02 형식으로 고객 ID와 날짜로 구성되어 있고, 열 중 하나는 비밀번호가 재설정된 시간을 저장하는 password_reset이라고 가정해 보겠습니다. Cloud Bigtable은 다음과 같이 이를 사전순으로 저장합니다. 비밀번호가 재설정되지 않은 행(일)에는 열이 없음에 유의하세요.

`123ABC#2020-02-12,password_reset:03`
`123ABC#2020-04-02,password_reset:11`
`123ABC#2020-04-14`
`123ABC#2020-05-02`
`223ABC#2020-05-22`

고객 123ABC가 비밀번호를 마지막으로 재설정한 시간을 찾으려면 먼저 2020-05-21~2020-05-22 범위를 읽는 것으로 시작할 수 있습니다. 그런 다음 값을 찾을 수 없으면 password_reset 열의 값이 포함된 행이 검색될 때까지 2020-05-19~2020-05-20 등을 검색합니다.

다음 단계