[컴][DB] DB 의 sharding

data sharding 과 관련된 자료


ref.1 에서는 Database 를 partitioning 하는 방법에 대한 개괄적인 소개가 나와 있다.
  • Master/Slave
  • Cluster Computing
  • Table Partitioning
  • Federated Tables

그리고 sharding 에 대한 이야기가 있다. 아래 글은 ref. 1 의 내용을 대략적으로 정리해 놨다.

Database Sharding

큰 하나의 database 를 여러개의 작은 db 로 쪼개는 것이다. 이렇게 작은 db 가 여러개인 상태가 됐을 때의 장점은
  • 백업이나, index 를 걸거나 등의 추가적인 db 작업을 하기에 용이하다.(시간이 많이 걸리지 않는다.) 
  • 개개의 transaction 이 빨라진다.(index search, faster join operation, database lock ...)
  • 많은 경우 open source 를 사용하고, 일반적인 computer 에서 동작하기 때문에 비용을 줄일 수 있다.

DB sharding 의 과제

  • Reliability : 언제나 business 에서 이부분이 중요한데, 이것을 위해서 분산 시스템인 shard 에서 필요한 사항은 아래와 같다.
    • 각 shard 에 대한 자동 backup
    • DB shard redundancy : 최소 2개의 live copy 를 가지고 동작
    • Cost-effective hardware redundancy
    • Automated failover
  • Disaster Recovery site management
  • Distributed Queries : 여러개의 shard 에 query 를 날려서 얻은 결과를 merge 해줄 수 있는 장비가 한다.
  • Avoidance of cross-shard joins : 여러 shard 에 걸쳐지는 inner-join 같은 작업은 엄청 비효율적이고 수행하기 어렵다. 그래서 Global tables 들의 복사를 이용해서 상대적으로 static 한 lookup tables 을 이용하는 것이다. 이 tables 을 이용해서 join 등을 수행하는 것이다.
  • Auto-increment key management : 여러 shard 에 걸쳐서 unique 한 key 를 생성해줄 수 있어야 한다.
  • Support for multiple Shard Schemes : application 에 맞는 scheme 을 선택하거나, application 에 맞게 scheme 을 조정할 수 있어야 한다.
  • Session-based sharding : 한 session 과 관련된 녀석은 같은 shard 에 있게 sharding 을 한다.
  • Transaction-based sharding : 처음 sql transaction 이 발생하면 이녀석이 어느 shard 를 사용하는지를 판단해서 나머지 transaction 도 그 shard 로 넘겨주는 방식이다. 보통 shard key 등을 이용해서 구현된다.
  • Statement-based sharding : 날라오는 모든 sql statement 를 검사해서 알맞는 shard 로 보내는 방법이다.
  • Determine the optimum method for sharding the data
    • Shard by a primary key on a table
    • Shard by the modulus of a key value
    • Maintain a master shard index table



References




댓글 없음:

댓글 쓰기