junho85 / me

about junho85
2 stars 0 forks source link

"HBase consistent secondary indexing" 보기 #8

Open junho85 opened 8 years ago

junho85 commented 8 years ago

개요

HBase 관련 자료 보기

http://deview.kr/2015/schedule#session/85

Slide http://www.slideshare.net/deview/223-h-base-consistent-secondary-indexing

Video http://serviceapi.rmcnmv.naver.com/flash/outKeyPlayer.nhn?vid=418C21077EB1D33E966E04CC676647DAE467&outKey=V128f33271536740e439e39e3c5c982f5e4382d3853f4c26a0a6239e3c5c982f5e438&controlBarMovable=true&jsCallable=true&skinName=tvcast_white

내용

HBase 의 모든 데이터는 rowkey 기준으로 사전순으로 정렬 row 키가 아닌 것을 기준으로 검색하려면 Full scan 필요

HBase 는 대규모에 집중 그래서 보조인덱스는 지원하지 않음 필요하면 직접 만들어 써야 됨

index 테이블 만들어서 할 수 있음

그러나 Consistency 가 깨질 수 있음

Index consistency가 깨어지는 3가지 경우

  1. put 하는 도중의 indexing 지연/실패
  2. 지워지지 않은 예전 index 정보 예전 기반으로 된 데이터가 지워지지 않았을 경우 요청과는 다른 데이터를 클라이언트에게 줄 수 있음
  3. IndexTable을 읽는 도중 발생한 데이터 갱신

찾고 있던 것 HBase에서 동작하는 보조인덱스 시스템

직접 구현

Index Consistency 가 깨어진 이유

  1. 데이터와 인덱스의 갱신이 atomic하지 않다
    • Client가 요청하는 시점에 따라 index의 consistency가 깨질 수 있다.
    • Index와 Data가 동시점에 유효해 져야 한다.
    • Indexing 과정에는 과거의 index도 ...
  2. 데이터와 인덱스 정보의 유효성을 알 수 없다.
  3. 획득한 Index 정보와 data를 조회하는 시점은 다르다.
    • index정보를 확인해야 data의 rowkey를 알 수 있으므로
  4. 서로 다른 시점에 획득한 두 정보의 유효성을 알 수 없다.
    • 유효성을 검증할 방법이 필요하다.

...

어떻게 만들까? HBase의 오픈소스 Transaction 시스템들을 이용하여 구현하면?

MVCC (Multi-version concurrency control)

...

Versioned Index 3가지의 timestamp의 비교를 통한 index consistency 구현

  1. data's timestamp: dataTable의 data가 가지는 본연의 timestamp
  2. index's timestamp: indexing 한 대상 data가 가졌던 timestamp

movieStar

movieStar.index.spouse ...

  1. him:timestamp: 현재 유효한 데이터와 인덱스의 timestamp값
  2. 데이터 Put 및 indexing과정이 모두 성공했을 경우 업데이트된다.
  3. ...

Versioned Index와 index consistency

  1. 데이터와 인덱스의 갱신을 atomic하게 (Put/Delete)
    • him: timestamp 값이 버전인 데이터와 인덱스가 유효하다. ...
  2. 데이터와 인덱스 정보의 유효성 검증(Get/Scan)
  3. Client는 접근하는 경로에 상관없이 유효한 버전의 데이터를 획득한다.
  4. 획득한 Index 정보가 data를 조회하는 시점에 유효한 것을...

Put 동작방식

  1. dataTable에 데이터를 Put
  2. indexTable들에 indexing
  3. him:timestamp 업데이트

dataTable 에서 Scan/Get 동작방식

  1. dataTable에서 데이터를 획득
  2. him: timestamp 값의 데이터를 리턴 ...
  3. Hbase환경에서 보조인덱스 시스템 구현하기 :HIM

Local vs Global indexing ...

Local indexing data와 index가 같은 리전 서버에 ... data의 Region단위로 인덱스 생성하기 ...

위태위태 RDB의 개념을 가져온 것

NoSql, Index

한권의 책을 HBase Table에 넣는다면? HBaseTable = PaperBook rowkey = page_num + word_seq value = word

: FullScan 하면 책 한권의 ...

Index는?

HBaseTable = PaperBook rowkey = page_num + word_seq value = word

IndexTable = PaperBook's index indexRowkey = hotKeyword{}page_num

책의 모든 단어를 Indexing 하지는 않는다.

사람들이 찾아보는 단어는 한정되어 있음 모두 넣으면 종이 낭비

Full index 비용

Index를 통해 데이터를 찾지 않는다면 모든 비용은 쓸모가 없다. ...

Sub-index란? 필요한 데이터만 Indexing 하기

Full-index에서 Sub-index로 General Index->Purpose orientated Index Non-conditional Index->Multi-Conditional Index

Column-based Index->Cell(Column+Value) based Index

Full Index->Sub-Index

sub index 조건과 데이터타입

EQUAL NOT_EQUAL GREAT_OR_EQUAL SMALL_THAN NULL NOT_NULL ...

& 여러가지 데이터 타입

String int ...

Purpose orientated index

Request] 35살 이하, 결혼하지 않은 배우 정보 리스트

movieStar.index.spose

HTableInterface indexTable = conn.getTable("movieStar....

...

작고 많은 수의 인덱스 vs 크고 적은 수의 인덱스

Performance: 작고 많은 sub-Indices? indexes 아닌가? ...

Performance: 10% sub ...

Performance: 10% sub indices

Disk Usage

Dynamic & Flexible 유연하고 동적인 구조라면

...

Tag SNS의 #HashTag 와 유사한 기능

Tagging/untagging tag/untag

Get by tag name Scan by Tag

38min

마무리: 보조인덱스 구축시 고려할 점