샤딩 sharding

mysql 2018.12.19 08:20


데이터베이스 샤딩 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
샤딩 sharding  (0) 2018.12.19
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel  (0) 2018.12.18
파티셔닝 Partitioning  (0) 2018.12.17
Azure Linux VM에서 MySQL 성능 최적화  (0) 2016.06.16
Trackbacks 0 : Comments 0