Sharding(샤딩)

  • DB 확장성을 위해 장비 업그레이드를 통해서 Scale-Up 해서 병목을 피해감.
  • Scale-Up 통해서도 병목을 피할 없을 경우 Scale-Out 해야 한다. Scale-Otu 기술 하나 Sharding 이다.
  • 샤딩은 데이터베이스가 저장하고 있는 테이블을 테이블 단위로 분리하는 방법(수직 샤딩) 테이블 자체를 분할 하는 방법(수평 샤딩) 있다.
  • 수직 샤딩에서는 테이블 하나를 서로 다른 column 가진 테이블로 나누는 방법도 있다.

 

 

  • 수평 샤딩을 하면 샤딩 이후 DB 증가 시킬 마다 데이터 재분배를 해야 한다.
    • SELECT 작업을 마다 샤드한 테이블 모두를 검색해야 하기 때문에 통계 작업 등에서 골치 아픔
    • 부분을 자동으로 주는 미들웨어가 있으면 좋음
  • 수직 샤딩은 테이블 별로 데이터가 나누어지지 않고 한쪽으로 집중되면 샤딩의 의미가 약해진다
  • 샤딩의 특징
    • 성능 개선
    • 신뢰성 개선
    • 위치 추상화

 

  • 샤딩은 안하면 수록 좋다!!!
    • 최대한 데이터 구조 개선이나 Scale-Up 통해서 샤딩을 하지 않는 것이 좋다. 복잡성 증가를 피하기 위해
    • 샤딩 이전에 memchaced Redis 통해서 성능 개선을 한다
    • 샤딩을 해야 한다면 수직 샤딩을 먼저 시도해 본다.
    • 마지막으로 수평 샤딩을 한다.

 

사례-MongoDB 샤딩

  • 자동 샤딩을 있다.
  • 그러나 DB 요청이 아주 많을 라우팅 역할을 하는 서버에 병목이 발생할 있다.
  • 버전 주기가 짧고 버전 업이 마다 성능 기능 개선이 있으므로 언제나 최신 버전을 기준으로 확인 해봐야 한다
    • 웹이나 주위의 이전 버전 기준의 이야기를 그대로 들으면 안된다!!!

 

사례-MasterDB 방식의 샤딩

  • MasterDB 맵핑 테이블을 사용하여 유저마다 사용할 shard 나누어서 분산하는 방법
  • 유저 로그인 맵핑 테이블을 조회하면 어디에 있는지 있음
  • AUTO_INCREMENT 값도 맵핑 테이블에서 관리. 샤드마다 중복 값이 생기지 않음
  • 데이터 재분배 맵팅 테이블을 사용

 

사례-인스타그램의 샤딩

 

SQL- Spider fo MySQL 사용한 샤딩

  • 서로 다른 MySQL 인스턴스 테이블을 동일 인스턴스 테이블과 같이 다룰 있다.
  • xa 트랜잭션을 포함한 트랜잭션을 지원하기 때문에 갱신계 DB 클라스터링으로 이용 있다
  • 테이블 파티션을 지원하고 있기 때문에 파티션 룰을 이용하여 동일 테이블의 데이터를 복수의 서버에 분산 배치 있다
  • spider 스토리지 엔진 테이블을 만들면 MySQL 내부에서는 파일로의 심볼릭 링크 같이 하여 리모트 서버 테이블에 테이블 링크를 생성한다
  • 링크처의 테이블 스토리지 엔진에 제한이 없다
  • 사용 방법


신고
by 흥배 2014.01.20 08:00

1. 정기적으로 계측한다.

- Collection/Document 수 증감.

ex) db.usercollection.find.count()

ex) db.usercollection.stats()

 

- Disk 사용현환 파악

 

 

2. 정기적으로 백업

MongoDB 프로세스를 중단이 가능한 경우

=> 데이터 파일을 복사(OS 명령어)하면 OK(콜드 백업)

 

프로세스를 멈추지 못하는 경우

=> MongoDB의 툴인  mongodump 이용

 

 

3. 정기적으로 데이터 최적화

정기적으로 RepairDatabase 커맨드 실시

ex) mongod --repair

--repair 옵션 지정으로 프로세스 기동

 

ex) db.repairDatabase()

mongo 셀 상에서 명령 실행

 

이점

Disk 사이즈(데이터 파일) 축소

=> Insert/Delete 뿐인 Collection의 경우 실은 Mongo Document 안은 빵꾸가 생겨서 사용 효율이 쉽게 나쁘게 된다.

 

Index 최적화(Rebuild)

 

단점

시간이 걸린다. 모든 데이터가 대상이 된다.

서버에 그 시점의 데이터 파일 사이즈 이상의 빈 공간이 없으면 에러가 된다.

 

v2계에서 컬렉션 단위로 최적화 가능. Index rebuild 해 준다.

ex) db.collection.compact()

Disk 사이즈는 줄지 않는다.

 

 

4. 정기적으로 버전 업

성능. 기능 개선

Index 사이즈 Down

성능 Up

Journaling에 의한 내장해성 Up

버그 픽스 



5. 많은 동시 접속을 받을 수 있다.

PostgreSQL의 경우 보통 1000개 접속이 한계이지만 MongoDB의 경우 클라우드의 2GB 머신에서 20000 접속을 받을 수 있음.


저작자 표시
신고
by 흥배 2014.01.17 08:00

괜찮은 자료를 보고 공유하고 싶어서 번역해 보았습니다

이 문서의 저자가 생각한 구조와 비슷하게 저도 NoSQL을 사용하고 있어서 뜻이 맞는 부분이 많네요^^ 































저작자 표시
신고
by 흥배 2013.11.18 08:00

Ubuntu에 설치 및 실행

sudo apt-get install mysql-server

설치 중 root(MySQL의)의 암호를 입력(잘 기억해야 한다)

설치 확인 sudo netstat -tap | grep mysql

재 시작하기 sudo /etc/init.d/mysql restart

종료 mysql stop

시작 mysql -u root -p



외부에서 접속하기

mysql은 기본 설치한 상태에서는 외부에서 접속할 수 없다.!!!

방법 http://valley.egloos.com/viewer/?url=http://devxpert.egloos.com/1017656 참고 했음

권한 설정

prompt> mysql -u root -p

prompt> use mysql;

prompt> GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY 'password';

prompt> flush privileges;

*.* =>데이터베이스명.테이블명

root => 계정명

password => 계정의 패스워드

flush privileges; => 서버에 권한이 변경되었음을 알리고 즉시 반영되도록


mysql 재시작

sudo /etc/init.d/mysql restart



mysql GUI Tool

오라클에서 제공하는 Workbench 라는 괜춘한 툴이 있다.

리눅스, Mac OS, Windows를 지원한다(아마 자바 설치가 필요할 듯).

다운로드 http://dev.mysql.com/downloads/mirror.php?id=412167

사용 방법 http://blog.naver.com/doblhead/80191288595

저작자 표시
신고
by 흥배 2013.10.03 08:00

데이터베이스에 만들어져 있는 테이블이나 SP 등의 정보를 알고 싶을 때 INFORMATION_SCHEMA에 대해서 쿼리를 하면 알 수 있습니다.

 

'INFORMATION_SCHEMA.원하는 정보'가 됩니다.

 

MSDN에는 http://msdn.microsoft.com/ko-kr/library/ms186778%28v=sql.100%29 에 관련 정보를 볼 수 있습니다.

 

 

예를 들어 모든 SP에 대해서 알고 싶다면

 

SELECT SPECIFIC_SCHEMA, SPECIFIC_NAME, PARAMETER_NAME, PARAMETER_MODE, ORDINAL_POSITION, DATA_TYPE,

    CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION, NUMERIC_SCALE

FROM INFORMATION_SCHEMA.PARAMETERS;

출처 : http://msdn.microsoft.com/ko-kr/library/ms173796%28v=sql.100%29.aspx

 

저작자 표시
신고
by 흥배 2012.10.05 09:00

초간단하게 정리했습니다.^^


http://jacking.springnote.com/pages/1938074
신고
by 흥배 2009.03.21 12:27
| 1 |