콘텐츠로 이동

인코딩

이 문서는 Actionbase가 내부적으로 데이터를 인코딩하고 저장하는 방법을 설명합니다. 이 정보는 주로 기여자와 저수준 저장 포맷을 이해해야 하는 사용자를 위한 것입니다.

고수준 개념은 핵심 개념을 참조하세요.

Actionbase는 스토리지 백엔드에서 여러 행 타입을 사용하여 엣지 데이터를 저장합니다. 각 행 타입은 특정 쿼리 목적에 맞게 설계되었습니다.

행 타입타입 코드목적쿼리 타입
엣지 상태-3현재 엣지 상태Get
엣지 인덱스-4인덱스 항목Scan
엣지 카운트-2엣지 카운트Count

Get 쿼리를 위한 엣지의 현재 상태를 저장합니다.

[4-byte hash] + [1-byte + source] + [1-byte + table code] + [1-byte + type code(-3)] + [1-byte + target]
필드타입설명
activeBoolean엣지 활성 상태
versionLong엣지 버전
propertiesMap프로퍼티별 버전 정보를 포함한 프로퍼티 값
createdAtLong생성 타임스탬프
deletedAtLong삭제 타임스탬프

Scan 쿼리의 인덱스 엔트리를 저장합니다. 고카디널리티 인덱스를 위해 내로우 로우 포맷을 사용합니다.

[4-byte hash] + [1-byte + directed source] + [1-byte + table code] + [1-byte + type code(-4)] +
[1-byte + direction] + [1-byte + index code] + [(1-byte + N) * # index values] + [1-byte + directed target]
필드타입설명
versionLong엣지 버전
propertiesMap프로퍼티 값

카운트 쿼리의 카운터를 저장합니다. 스토리지 백엔드의 increment 연산을 사용합니다.

[4-byte hash] + [1-byte + directed source] + [1-byte + table code] + [1-byte + type code(-2)] + [1-byte + direction]
필드타입설명
countLong엣지 카운트

모든 로우 키는 공통 패턴을 따릅니다:

[4-byte hash] + [1-byte + source] + [1-byte + table code] + [1-byte + type code] + [additional fields...]
컴포넌트크기목적
해시4 bytesregion distribution을 위한 xxhash32
타입 코드1 byte데이터 타입 식별 (-2, -3, -4)
소스/타겟가변 길이1바이트 길이 접두사 포함

해쉬 프리픽스는 HBase region 전체에 고르게 분산되도록 하여 핫스팟을 방지합니다.

Actionbase는 타입 정보를 유지하기 위해 바이트 헤더를 사용합니다:

[1-byte type information] + [actual value]
측면설명
타입 코드NULL, STRING, INT, FLOAT, JSON 등 구분
정렬 순서인덱스 정렬을 위한 ASC/DESC 포함
인코딩정렬 순서에 따라 값 인코딩
행 타입버전 범위
EdgeState속성별 버전
EdgeIndex엣지별 버전

4바이트 xxhash32 프리픽스는 다음을 보장합니다:

  • 스토리지 영역 전반에 걸친 균일한 분배
  • 쓰기 핫스팟 방지
  • 균형 잡힌 읽기/쓰기 부하

타입 코드는 음수 값(-2, -3, -4)을 사용하여:

  • 사용자 데이터와 분리
  • 효율적인 키 범위 스캔 가능
  • 명확한 타입 식별 제공

모든 가변 길이 필드는 1바이트 길이 접두사를 사용합니다:

  • 효율적인 파싱 지원
  • 바이너리 안전 인코딩 지원
  • 접두사 기반 스캔 허용

(이 문서는 Kanana-2로 번역되었습니다. 번역 기여를 환영합니다!)