database sharding spider

김경민·2022년 5월 27일
1

database

목록 보기
1/10
post-thumbnail

데이터베이스 샤딩

  • 파티셔닝과 달리 별도의 샤드를 구축, 샤딩 플랫폼(스파이더)를 통해 구현
  • 쓰기 성능이 지속적으로 향상됨
  • 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/

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 성능 향상

0개의 댓글