Distributed System

좋은 샤딩 키란?

미르(Мир) 2021. 12. 10. 22:24

메타 데이터를 분산 데이터 베이스에 샤딩하여 저장하는데 샤딩을 하기위해 좋은 키란 무엇일까?

-> 분산 불균형을 막도록 하는 키

  • Cardinality : shard key의 범위가 충분히 넓은가
    특정 스토리지를 제외하고 나머지 스토리지는 놀고 있음

  • Frequency : shard key가 특정 값에 치중되어 있지 않은가?
    특정 스토리지에만 데이터가 많이 쌓임

  • Monotonically changing key : shard key가 특정 방향으로 커지는 값은 아닌가?
    가장 마지막 스토리지에 최신 데이터가 쌓이게 됨
  1. dir 을 기준으로 샤딩할 경우
    특정 스토리지에만 데이터가 쌓일 수 있음
  2. file을 기준으로 샤딩할 경우 
    이름이 같은 파일이 많다면 특정 스토리지에만 데이터가 쌓임


  3. dir/file을 기준으로 샤딩할 경우

분산이 잘되는 것을 확인할 수 있음

 

단점 : Listing에 대한 부담이 존재하게됨 -> 전체 디비를 조회하는것을 제외하고는 답이 없게 됨

- Consistency 모델에서 타협을 볼 수 밖에 없음

  • 읽기 = 파일 읽기  + 디렉토리 리스팅
    파일이 저장되면 바로 읽히는 것만 요구하지 리스팅까지 바로되는 것까지 원하진 않음
  • 파일 읽기에 대해서는 strong consistency보장
  • 리스팅에 대해서는 Eventual consistency를 보장