SSTable이란 무엇입니까?


답변:


105

Sorted Strings Table (Google에서 빌려 옴)은 키별로 정렬 된 키 / 값 문자열 쌍의 파일입니다.


4
또 다른 훌륭한 SO Cassandra 답변에 감사드립니다! BTW,이 질문을
보셨나요

일반적으로 불변입니까?
Dean J

1
멋진 기능입니다 - 예, sstables 설계에 의해 불변
Schildmeijer

그러면 어떻게 정렬되고 불변 할 수 있습니까?
xjcl

56

"SSTable은 키와 값 모두 임의의 바이트 문자열 인 키에서 값으로의 지속적이고 순서가 지정된 변경 불가능한 맵을 제공합니다. 지정된 키와 연관된 값을 조회하고 모든 키 / 값 쌍을 반복하는 작업이 제공됩니다. 내부적으로 각 SSTable에는 일련의 블록이 포함됩니다 (일반적으로 각 블록의 크기는 64KB이지만 구성 가능). 블록 인덱스 (SSTable 끝에 저장 됨)는 블록을 찾는 데 사용되며 인덱스가로드됩니다. 단일 디스크 검색으로 조회를 수행 할 수 있습니다. 먼저 메모리 내 인덱스에서 이진 검색을 수행 한 다음 디스크에서 적절한 블록을 읽어 적절한 블록을 찾습니다. 선택적으로 SSTable 메모리에 완전히 매핑되어 디스크를 건드리지 않고도 조회 및 스캔을 수행 할 수 있습니다."


4
"디스크를 건드리지 않고"-> "디스크를 건 드리는 것을 알지 못함". 메모리 매핑 된 IO는 실제 IO를 OS에 위임하기 때문에 매우 편리한 기술입니다 (특히 여러 프로세스가 같은 파일을 공유하는 경우). 그러나 그것은 당신이 그것을 통제 할 수 없다는 단점이 있습니다. 페이지가 메모리에 상주하지 않으면 스레드가 차단되고 다른 작업을 수행 할 수 없습니다. IO가 보류중인 동안 콜백을 등록하고 다른 작업을 수행 할 수있는 "비동기 IO"와 대조됩니다.
ithkuil

2
@ithkuil : 최소한 특정 페이지가 메모리에 있거나 디스크에 커밋되었는지 확인할 수있을 때까지 메모리 매핑 된 IO를 제어 할 수 있습니다. 기억이지만 아주 잘 될 수 있습니다). 이것이 mlock (), msync (), MAP_LOCKED와 같은 놀라운 것들입니다. 또한 mincore ()를 통해 현재 페이지에있는 것과없는 것을 이해할 수 있습니다.
크리스토퍼 스미스

2
@ChristopherSmith : 예, 맞습니다. 제어 할 수있는 방법이 있습니다. 그러나 일반적으로 중요한 성능 섹션 (실시간) 또는 보안 관련 문제 (예 : 메모리 내 암호가 디스크에서 스왑되는 것을 방지)에 사용됩니다. 메모리 매핑 파일은 메모리에 보관할 파일의 양을 결정할 필요가 없기 때문에 정확히 매우 유용합니다. 그렇지 않으면 mmap없이 메모리의 전체 파일을 읽고 동일한 효과를 얻을 수 있습니다. 사실, 나는 단지 카산드라 코드를 살펴 보았다. 유일한 호출은 mlockall(MCL_CURRENT);시작시 수행됩니다. 참조 : goo.gl/AEgPM
ithkuil

4
위의 인용문은 BigTable 논문 에서 발췌 한 것입니다 .
ShreevatsaR

4

태블릿은 SSTable의 형태로 저장됩니다.

SSTable (GFS에 직접 매핑 됨)은 키-값 기반의 불변 저장소입니다. 각각 64KB의 데이터 청크를 저장합니다.

정의 :

  • 키 색인 : 키 및 시작 위치
  • 청크는 GFS의 저장 단위이며 복제본 관리는 청크 단위입니다.

3
  • SSTable (engl. Sorted Strings Table)은 키별로 정렬 된 키 / 값 문자열 쌍의 파일입니다.

  • SSTable은 키와 값 모두 임의의 바이트 문자열 인 키에서 값으로의 지속적이고 정렬 된 불변 맵을 제공합니다.

  • 내부적으로 각 SSTable에는 일련의 블록이 포함됩니다 (일반적으로
    각 블록의 크기는 64KB이지만 구성 가능).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.