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
댓글 없음:
댓글 쓰기