'Database'에 해당되는 글 3건

  1. 샤딩과 리플리케이션
  2. mongoDB
  3. 데이터베이스의 분류와 종류 (1)

샤딩과 리플리케이션

샤딩과 리플리케이션

서버공부를 처음 할 때 샤딩이랑 리플리케이션이라는 단어가 자꾸 들리는데 뭔지 몰랐다. 상식으로 알아두자.

Sharding

Naver hello world; NHN의 안과 밖: Sharding Platform
샤딩이란 수평 파티셔닝(horizontal partitioning)과 동일하다. 하나의 테이블을 수평으로 나눠 퍼포먼스 향상에 기여한다. 나누는 방법이야 다양하겠지만 마땅찮으면 키값을 해쉬하는것도 하나의 방법이다.

데이터베이스가 이러한 작업을 알아서 다 해주면 ‘데이터베이스가 샤딩을 지원한다’ 고 한다. Oracle이 그러하며, mysql도 돈 내고 쓰면 이 기능이 된단다. 아니면 어플리케이션단에서 직접 샤딩을 할 수 있다.

위 링크를 참조하면, 최근에는 DB와 앱 사이에서 샤딩을 제공하는 미들티어 샤딩 플랫폼들이 등장하고 있다.

Replication

DB 이중화라고 할 수 있다. 마스터-슬레이브 구조. 데이터의 안정성을 도모한다. 마스터에 문제가 생겨도 시스템에는 문제가 없다. 레디스 같은 경우엔 마스터로의 커넥션이 실패하면 슬레이브로 연결이 되는데, 오라클 같은 경우엔 마스터-슬레이브를 하나의 버추얼 ip로 묶어 OS가 관리한다. 즉, 레디스에 비해서 대응이 빠르다.

'Database' 카테고리의 다른 글

샤딩과 리플리케이션  (0) 2014.11.24
mongoDB  (0) 2014.10.09
데이터베이스의 분류와 종류  (1) 2014.08.09

mongoDB

MongoDB

예전부터 말을 많이 들었고 계속 써보고 싶었는데, 드디어 써볼 기회가 생겼다. 별로 대단한 작업을 할 건 아니지만 어차피 이런 건 정말 대단한 작업이 아니라면 규모의 크기에 상관없이 써보는 것 자체가 의미가 있다.

쓰고 나니 너무 별 내용이 없어서 괜히 썼다 싶은데 일단 썼으니 올리도록 한다. -_-
워낙 문서도 잘 되어 있고 사용도 쉬워서 그냥 공식 홈페이지 문서 보고 따라하면 된다.

서버는 소마 서버로 KT uCloud ubuntu 12.04를 사용한다.

Install

몽고디비는 충분히 유명하고, 이런 건 공식 홈페이지를 따르는게 최고다.
Install MongoDB on Ubuntu

조금 내리다보면 Install MongoDB가 나온다. 그대로 따라하자.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

apt-get install-y 옵션은 [Y/n]이 나오면 다 yes를 하겠다는 의미.

Run

위 문서에서 조금 내려보면 Run MongoDB가 있다. 설치가 끝나면 자동으로 run이 된다.
디폴트로 /var/lib/mongodb에 데이터파일이 저장되고, /var/log/mongodb에 로그파일이 저장된다.

sudo service mongod start
sudo service mongod stop
sudo service mongod restart

요렇게 start, stop, restart를 할 수 있다.

Start!

몽고디비를 시작해보자. 역시 공식 홈페이지에서 제공한다.
Getting Started with MongoDB

with python

역시 파이썬과 연동을 해야지.

pymongo

flask-pymongo
pymongo는 이름만 봐도 알 수 있듯 python에서 mongodb에 접근할 수 있는 라이브러리다. 파이몽고 또한 플라스크 공식 도큐먼트에 소개되어 있다.

import sys
import pymongo

connection = pymongo.MongoClient("mongodb://localhost")
db = connection.testdb
users = db.users

doc = {'_id': 1, 'name': 'cjb', 'age': 25}

try:
    users.insert(doc)
except:
    print "insert failed", sys.exc_info()[0]

해 보면 잘 된다.

mongokit

flask-mongokit
플라스크 공식 도큐먼트에서도 소개하는 mongodb ORM이다.

'Database' 카테고리의 다른 글

샤딩과 리플리케이션  (0) 2014.11.24
mongoDB  (0) 2014.10.09
데이터베이스의 분류와 종류  (1) 2014.08.09

데이터베이스의 분류와 종류

Databases


DB의 분류

데이터베이스는 크게 RDB와 NoSQL의 두종류로 나뉜다.
SQL : Structured Query Language. 처음에는 SEQUEL(Structured English QUEry Language)이었으나 영국 항공사 상표와 겹쳐 SQL로 변경. 지금도 시퀄이라고 읽는 사람들이 많다.

  • RDBMS(Relational Database Management System)

  • ORDBMS(Object-Relational Database Management System)
    객체지향 데이터베이스 모델을 가진 RDB. 현재 RDB도 Flask(mysql) + SQLAlchemy처럼 위에 라이브러리를 덧씌워 ORDB로 사용하는게 보통이다. 그걸 DBMS 차원에서 지원하는 것이 ORDBMS.

  • NoSQL(Not Only SQL)
    NoSQL이란 무엇인가? : NoSQL의 데이터 저장 형식에 따른 분류가 잘 나와있음
    NoSQL에 대해서 간단히 알아보자!
    RDB가 아닌 데이터베이스가 NoSQL. NoSQL은 각 제품에 따라 저장 방식이 달라 하나로 정의할 수 없다. 몽고DB나 카우치DB는 도큐먼트 베이스다.
    그러나 당연히 공통적인 특징은 있는데,

    • RDB와 달리 데이터간 관계를 정의하지 않는다
    • RDB에 비해 훨씬 더 대용량의 데이터를 저장할 수 있다
    • 클라우드 시스템(분산형 구조)
    • 고정되지 않은 테이블 스키마
    • CAP 이론

CAP 이론

분산컴퓨팅 환경은 Consistency, Availability, Partition Tolerance의 세가지 특징을 가지고 있으며 이중 두가지만 만족할 수 있다는 이론.
- Consistency : 어느 분산 노드에서 접근하든지 데이터 값이 같아야 한다
- Availability : 어느 노드 하나가 Fail이 되더라도 정상적으로 작동해야 한다
- Partition Tolerance : 노드 간 통신 네트워크에 장애가 생겨도 정상적으로 작동해야 한다

CAP


DBMS의 종류

Software Stacks Market Share : Database 참고

RDB

  • MySQL
    알다시피 가장 많이 사용하는 무료 DBMS다. 분류는 RDB.
    커뮤니티 버전은 오픈소스. SUN에 10억 달러에 인수된 후 오라클이 썬을 72억 달러에 인수하면서 결국 오라클이 MySQL을 소유하게 되었다. 오라클이 오픈소스에 호의적이지 않기 때문에 MySQL 사용자들 사이에서 불안감이 커졌고 그로 인해 대체재로 등장한 것이 바로 MariaDB다.

  • MariaDB
    MySQL 클론의 역습 – 1 (MariaDB 편)
    MySQL이 Sun Microsystems로 넘어가면서 당시 MySQL AB 출신들이 따로 나와서 MySQL을 기반으로 한 오픈 소스 DBMS를 만들었다. 그게 바로 MariaDB. MySQL을 기반으로 만들었기 때문에 거의 완벽하게 호환이 된다.

  • Oracle
    가장 유명한 유료 DBMS. 미국의 대표적인 RDBMS 회사인 오라클 사 및 그 회사에서 만드는 데이터베이스 관리 시스템. 엔터프라이즈 DB 시장의 절반 이상을 항상 차지하고 있다.

  • PostgreSQL
    ORDBMS. 다양한 기능을 제공하는 오픈소스 DBMS. 엔터프라이즈급이나 차세대 DBMS에서 제공하는 기능들을 많이 제공한다.
    한눈에 살펴보는 PostgreSQL

NoSQL

주요 NoSQL에 대한 초간단 정리

  • MongoDB와 CouchBase
    둘 다 Document DB이며 메모리DB와 결합되어 있다.
    MongoDB vs Couchbase

In-memory DB

  • memcached
    memcached는 레디스와 다르게 순수한 메모리 DB다.
    Memcached의 확장성 개선

  • Redis
    REmote DIctionary System. NoSQL로도 분류된다. 레디스는 memcached와 다르게 데이터를 디스크에 저장할 수 있다.
    memcached와는 다르게 데이터 스트럭처를 제공한다; String, Set, Sorted Set, Hashs, List.
    In memory dictionary Redis 소개
    redis vs memcached : 생산성으로는 Redis! 성능으로는 케이스 바이 케이스.


SQLite

  • sqlite
    지금까지 살펴본 DBMS들은 서버-클라이언트 구조에서 대규모 데이터베이스 관리를 위한 시스템이다. 그러나 sqlite는 이와 달리 로컬에서 사용하는 경량 데이터베이스. 원격 Connection이 발생하지 않기 때문에 데이터로의 접근이 매우 빠름. 아이폰이나 안드로이드 등의 모바일에서 많이 활용된다. 오픈소스.
    SQLite 1탄, 이것만은 알고 넘어가자!

'Database' 카테고리의 다른 글

샤딩과 리플리케이션  (0) 2014.11.24
mongoDB  (0) 2014.10.09
데이터베이스의 분류와 종류  (1) 2014.08.09