데이터베이스 샤딩 sharding
- 파티셔닝과 달리 별도의 샤드를 구축, 샤딩 플랫폼(스파이더)를 통해 구현
- 쓰기 성능이 지속적으로 향상됨
- Spider 기반 샤딩 구축
수직(Verical) 샤딩
- 샤드를 만들어 저장할 때 구분 기준을 연령/성별과 같은 기준으로 나눠 구성
- 테이블 단위로 분할
수평(Horizontal) 샤딩
- 동일한 시스템을 지역/국가별로 나눠서 구성하는 경우
- 동일한 테이블을 여러 개로 분할
범위(range) a-m /n-r / s-z
해시(hash) 해시함수 파티션별로 크기를 비슷하게 나눔
리스트(list) 특정한 컬럼을 기준
컴포지트(composite) range-hash/range-list
mariadb 다운로드
docker pull mariadb:10.1
스파이더 인스턴스 실행
docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=spider mariadb:10.1
접속
docker exec -it spider bash
테스트인스턴스 실행
docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=sample1 mariadb:10.1
docker run -d -e MYSQL_ROOT_PASSWORD=sample --name-sample2 mariadb:10.1
실행 인스턴스 확인
docker ps -a
테스트인스턴스 접속
docker exec -it sample1 bash
docker exec -it sample2 bash
IP주소 확인
docker inspect spider | grep "IPAddress"
docker inspect sample1 | grep "IPAddress"
docker inspect sample2 | grep "IPAddress"
docker exec -it spider bash
docker exec -it sample1 bash
docker exec -it sample2 bash
cd /user/share/mysql
스파이더 설치
mysql -u root < /usr/share/mysql/install_spider.sql
스파이더 엔진 설치확인
show engines;
https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
http://yakolla.tistory.com/69
spider sample1,2 에 사용자추가 및 권한 할당
use mysql;
create user 'spider-test'@'%' identified by 'sample';
grant all on *.* to 'spider-test'@'%' with grant option;
flush privileges;
샤딩 플렛폼에 서버정보 등록하기
create server sample1
foreign data wrapper mysql
options(
host '172.17.0.x',
database 'sampleDB',
user 'spider-test',
password 'sample',
port 3306
);
create server sample2
foreign data wrapper mysql
options(
host '172.17.0.x',
database 'sampleDB',
user 'spider-test',
password 'sample',
port 3306
);
서버정보 확인하기
select * from mysql.servers;
spider 에 table 생성
create database sampleDB;
user sampleDB;
create table shardingTest(id int not null auto_increment, name varchar(255) not null, address varchar(255) not null, primary key(id) engine=spider comment='wrapper "mysql", talbe "shardingTest"' partition by key(id) (partition sample1 comment = 'srv "sample1"', partition sample2 comment = 'srv "sample2"' );
sample1,2 에 talbe 생성
create database sampleDB;
user sampleDB;
create table shardingTest
(
id int not null auto_increment,
name varchar(255) not null,
address varchar(255) not null,
primary key(id)
);
spider 접속 후
user sampleDB;
insert into shardingTest(name, address) values ('kim', 'seoul');
insert into shardingTest(name, address) values ('lee', 'seoul');
insert into shardingTest(name, address) values ('park', 'seoul');
insert into shardingTest(name, address) values ('kim', 'busan');
insert into shardingTest(name, address) values ('lee', 'daegu');
insert into shardingTest(name, address) values ('park', 'jeju');
select * from shardingTest;
sample1,2에서도 각각 확인
select * from shardingTest;
VLDB Very Large DBMS
Sharding
- DBMS 내용 분할 (DB/테이블)
- Write 성능 향상
Replication
- 동일한 DBMS를 여러 개 유지(마스터/슬레이브)
- Read 성능 향상
'mysql' 카테고리의 다른 글
복제 Replication (0) | 2018.12.19 |
---|---|
show processlist 에 where 조건 사용하기 (0) | 2018.12.19 |
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel (0) | 2018.12.18 |
파티셔닝 Partitioning (0) | 2018.12.17 |
Azure Linux VM에서 MySQL 성능 최적화 (0) | 2016.06.16 |
댓글