SlideShare una empresa de Scribd logo
1 de 49
The Architecture of OpenSource
         Applications:
    The NoSQL Ecosystem



         아꿈사 박종석
What’s in a name?
●
    No SQL
    –   기존의 RDBMS 가 아니다 . (sql 은 RDBMS 의 인
        터페이스 )
●
    Not only SQL
    –   기존의 RDBMS 의 대안이다 .
SQL and the Relational Model
●
    SQL
    –   정보를 어떻게 가져오는지 보다 , 어떤 정보를 원하
        는지를 기술하는 언어
    –   유저는 실제로 데이터가 어떻게 저장되어있는지에
        대해서는 신경쓰지 않는다 .
        ●
            대신 어떤 데이터에 index 를 걸지 , 어떤 알고리즘으로
            데이터를 프로세싱할지와 같은 추상화된 정보가 요구
        ●
            보통 query optimizer 가 좋은 성능을 발휘하지만 유저가
            더 많은 정보를 제공해주면 좀 더 효율적이 된다 . (hint)
SQL and the Relational Model
●
    RDBMS
    –   관계형 모델에 근거
        ●
            같은 entity 는 같은 속성을 가지고 하나의 table 로 저장
            됨
    –   데이터 이용은 데이터 구조 (schema) 에 영향을 끼
        치지 않는다
        ●
            기존 모델 ( 계층형 , 네트워크 ) 에서는 데이터의 구조가
            매우 중요했고 , 프로그래밍도 이것을 고려해야 했다 .
            ( 데이터를 이용하면서 구조가 변경되고 , 이것을 항상
            숙지하고 있어야 원하는 데이터에 접근이 가능함 )
    –   데이터와 프로그램이 분리가 가능하게됨
    –   매우 구조화된 entity 와 그들간의 relationsships
RDBMS 의 문제점
●
    Sql 의 풍부한 표현력은 각 쿼리의 성능이나 ,
    work load 를 예측하기 어렵게 만든다
    –   But, 간단한 query 만 지원하는 경우엔 어플리케이
        션 로직이 복잡해짐
●
    Strict 한 data 구조를 사용한다
    –   Object orient 데이터 구조나 dynamic data 구조
        (list, queue, set) 에 적합하지 않다
●
    Data 가 많아지게 되면 여러 컴퓨터 노드로 분
    산을 시켜야 한다
    –   여러 컴퓨터 노드 사이의 join 은 매우 어렵고 비 효
        율적이기 때문에 결국 denormalization 을 해야 한
RDBMS 는 대부분 좋다 !
●
    지금까지 많은 연구와 적용을 통해서 검증된 방
    식
●
    만약 data 를 저장하고자 한다면 RDBMS 를
    우선 고려
●
    하지만 특정 분야에서는 NoSQL 을 고려할 수
    있다 .
    –   대용량의 데이터
    –   RDBMS 로 설계하기에 너무 복잡한 데이터 구조가
        필요한 경우
NoSQL Inspirations
●
    Google’s BigTable
    –   Multi-column, range-based partitioning scheme,
        strict consistency
●
    Amazon’s Dynamo
    –   Key-oriented distributed datastore(simpe key-
        value data model), eventually consistency
●
    NoSQL system 디자인에 큰 영향을 끼쳤다
    –   Hbase
        ●
            BigTable
    –   Voldemort
        ●
            Dynamo
Characteristics and Considerations
●
    Data and query model
    –   Rows, objects, data structures or documents
        data?
    –   여러 record 에 동시에 접근하는 query?
●
    Durability
    –   Data 변경이 즉시 stable storage 로 저장 ?
    –   하나의 머신이 예상치 못하게 crash 되었을때 또는
        데이터 센터가 불에탔을때 데이터가 유지 ?
●
    Scalability
    –   Data 가 오직 특정 머신에만 저장 ?
Characteristics and Considerations
●
    Data and query model
    –   Rows, objects, data structures or documents
        data?
    –   여러 record 에 동시에 접근하는 query?
●
    Durability
    –   Data 변경이 즉시 stable storage 로 저장 ?
    –   하나의 머신이 예상치 못하게 crash 되었을때 또는
        데이터 센터가 불에탔을때 데이터가 유지 ?
●
    Scalability
    –   Data 가 오직 특정 머신에만 저장 ?
Characteristics and Considerations
●
    Consistency
    –   여러 노드에 데이터가 분산 (partitioned or
        replicated) 되어 있을때 , data 변경을 어떻게 처리
        할 것인가 ?
●
    Transactional semantics
    –   ACID 를 어느정도 까지 지원할 것인가 ?
    –   비즈니스와 성능 요구의 tradeoff
●
    Single-server performance
    –   Data 를 안전하게 disk 에 저장하려고 한다면 어떤
        on-disk data structure 로 저장해야할까 ?
    –   Read-heavy? Write-heavy?
NoSQL Data and Query Models
Key-based NoSQL Data Models
●
    아무리 데이터가 복잡해도 , NoSQL 에서는 결
    국 key 를 통해서 데이터를 찾게된다
    –   이후 value 에 대한 연산 방법은 각 NoSQL 이 다
        름
●
    데이터 표현하는 법
    –   Employee:30
        ●
            직원 id 가 30 인 레코드
    –   employee_departments:20
        ●
            20 번 부서 레코드
    –   관계형모델의 예 (Join 사용 ) (todo:)
    –   Key-value 모델의 예 (employee_departments 가
Key-based NoSQL Data Models
           Key-Value Store
●
    Voldemort(based in Dynamo), BDB
●
    Value 가 어떤 정보인지에 대해서 NoSQL
    store 는 모른다 . ( 단지 payload)
    –   Value 에 대한 연산을 제공하지 않음
    –   Application 에서 데이터 수정관련 모든 작업을 해야
        함
●
    Set, get, delete 외에 value 에 대한 어떤 연산
    도 할 수 없다
Key-based NoSQL Data Models
      Key-Data Structure Stores
●
    Redis
●
    각 value 에 type 을 지정
    –   Integer, string, list, set, sorted set
●
    Set, get, delete 외에 Type-specific command
    제공
    –   Integer
         ●
             Increment, decrement
    –   Lists
         ●
             Push, pop
●
    편리한 기능과 성능이 조화를 이룬다
Key-based NoSQL Data Models
        Key-Document Stores
●
    CouchDB, MongoDB, Riak
●
    Document 는 많은 구조화된 정보를 가지고 있
    는 데이터
●
    JSON 또는 비슷한 형태로 저장
●
    자유로운 구조 ( 형태 ) 의 Document 를 만들
    수 있지만 ...
    –   어플리케이션 로직이 복잡해진다
Key-based NoSQL Data Models
    Key-Document Stores
Key-based NoSQL Data Models
    BigTable Column Family Stores
●
    Hbase, Cassandra (BigTable)
●
    CF(Column Family) = 테이블과 비슷
    –   논리적인 관련이 있는 column 을 묶어서 관리
●
    Timestamp – 각 column 은 마지막 변경된 시간인
    timestamp 를 가지고 있다 .
●
    Sparse column placement
    –   공간 절약 및 성능 향상
Graph Storage
●
    Node, edge, property 로 구성
●
    HyperGraphDB, Neo4J
Complex Queries
●
    Key-value 의 단순쿼리가 아닌 sql 수준의 복
    잡한 쿼리를 제공
●
    MongoDB
●
    참고
    –   SQL to MongoDB Mapping Chart
    –   http://docs.mongodb.org/manual/reference/sql-comparis
Transactions ACID
●
    Atomic( 원자성 )
    –   연산은 성공 또는 실패 둘 중 하나 . 중간은 없다
●
    Consistent( 일관성 )
    –   비일관적인 데이터 상태를 트랜잭션이 보면 안된다
●
    Isolated( 고립성 )
    –   두개의 트랜잭션이 동시에 수행되어도 서로 연관을
        주면 안된다 . 트랜잭션이 순서대로 수행된것 처럼
        되어야 한다
●
    Durable( 지속성 )
    –   트랜잭션의 변경사항은 반영되어 남아있는다
Transactions ACID 단점
●
    ACID 는 성능 저하 요인이 된다
    –   long and slow 트랜잭션 하나는 전체 성능을 떨어
        뜨린다
●
    NoSQL 은 Performance 를 엄밀한 ACID 보다
    중요하게 여긴다
    –   하지만 key level 연산은 반드시 ACID 를 지킨다
        ●
            To avoid serious key-value pairs corruption
Data Durability
●
    이상적인 경우
    –   데이터 변경이 바로 안전한 디스크에 저장되고 , 지
        리적으로 떨어진 디스크에도 곧바로 저장된다




●
    문제는 성능 !
    –   NoSQL 은 다른 방법 적용
    –   성능과 Durability 수준에 대한 trade-off
Single-server Durability
●
    Server restart or power loss 에서 데이터 변경
    을 보장
    –   메모리에만 저장하지 말고 디스크에도 저장해야함
●
    Fsync
    –   매번 디스크에 접근하는 비용이 비싸기 때문에 , 실
        제로는 write 를 해도 디스크에 쓰지 않고 fsync 를
        할때에 디스크에 저장
Single-server Durability
              Control fsync frequency
●
    Memcached
    –   오직 메모리에서만 처리
    –   Single-server failure 시 데이터 사라짐
    –   하지만 매우 빠름
●
    Redis
    –   fsync frequency 조절 가능
        ●
            Every update
        ●
            every N seconds ( 최악의 경우 ? 최근 N 초간 데이터
            날라감 )
        ●
            entirely turn off fsync ( 언젠가는 disk 에 반영됨 )
Single-server Durability
    Increase Sequential Writes by Logging
●
    B+Tree
    –   Data 인덱싱에 사용
    –   B+Tree 의 update 는 여러 페이지에 산재되어 나타
        남 (Random access)
        ●
            디스크는 쓰는량보다 접근 횟수에 크리티컬
●
    Log
    –   연산을 디스크에 바로하지 않고 , 로그로 저장한다
    –   예를 들면 , 100 개 페이지에 대한 연산을 1 번의
        write 로 끝냄 ( 성능 대략 100 배 향상 )
    –   서버 failure 시에 로그를 통해 상태 복구 (redo)
Single-server Durability
    Increase Throughput by Grouping Writes
●
    Group commit
    –   한번의 fsync 로 여러 트랜잭션을 동시에 commit
    –   한 페이지에 동시에 여러 트랜잭션이 접근한 경우
        에 가능
    –   처음에 끝났어야 하는 트랜잭션은 , 나중에 온 트랜
        잭션이 끝날때까지 기다려야 함 .
    –   Latency 는 증가하지만 전체 throughput 은 상승
    –   성능과 Durability 두개를 모두 만족 (Hbase)
        ●
            Fsync 가 끝나야지 commit
Multi-server Durability
                Master-slave
●
    Redis
●
    Master 가 log 형태로 slave 로 데이터 전달
●
    Master 가 고장나면 slave 의 데이터를 사용가능
●
    Data loss 일어날 가능성 있다 (slave 복사 완료까지 기다리지
    않음 )
●
    Master 는 write, Slave 는 read 로 부하를 분산하기도 한다
Multi-server Durability
                      Replica set
●
    MongoDB
    –   Master 가 고장나면 slave 중 하나가 master 가 되고 , master 가 복구되면
        slave 가 되는데 , 이 과정이 자동으로 이루어 진다
    –   Master 는 update 가능 , slave 는 read 만
         ●
             하지만 , 모든 노드에 update 가능한 옵션 설정 가능
    –   Replica 들이 최신이 데이터가 아니어도 그냥 진행 가능 옵션도 설정 가능
●
    Hbase
    –   Master 에 대한 연산이 완전히 Slave 로 반영될때까지 연산 완료 안함
         ●
             느리지만 안정적
Multi-server Durability
        configurable form of replication
●
    Riak, Cassandra, Voldemort
●
    N = 데이터가 copy 되는 개수
●
    Update 에 대한 데이터가 다른 머신에 반영되
    는 갯수 W 조절가능
●
    Example
    –   N =3, W=2
         ●
             하나의 데이터는 3 개의 copy 를 가지고 있다 .
         ●
             그 데이터에 update 가 일어나면 , 최소한 2 개의 copy
             가 모두 반영될때까지 완료하지 않는다
●
    전체 데이터 센터가 고장날때를 대비해서
Scaling for Performance
●
    Scale up
    –   머신의 성능을 높임
    –   프로그램 복잡도 전혀 올라가지 않는 장점
    –   효과대비 비용이 비싸고 , 성능 향상에도 한계가 있
        다
●
    Scale out
    –   머신을 계속해서 붙여나갈 수 있게함
    –   프로그램이 복잡해짐
        ●
            대부분의 NoSQL 을 쓰면 쉽게 해결됨 (key-value 특성
            상 다른 데이터에 의존성이 적기 때문 )
    –   성능 향상에 한계가 없다 .
Do Not Shard Until You Have To
●
    복잡하기때문
●
    샤딩 없이 가능한 방법
    –   Read Replicas
        ●
            앞서 설명한 master-slave
    –   Caching
        ●
            여러개의 Memcached host 를 사용
        ●
            Scaling 을 지원하는 persistent solution 의 복잡함이 없
            다
        ●
            Read heavy workload 로 memcached 를 쓴다
        ●
            Write 오버헤드는 master server 로 몰린다
Sharding Through Coordinators
  ●
      CouchDB
      –   각 CouchDB Instance 간에는 서로는 인식하지 않음
      –   Proxy 의 ConfigDB(Lounge and BigCouch) 가 client 의 요
          청을 받아서 각 CouchDB 로 중계
      –   장점 ? 심플 , 관심사 분리




ConfigDB 만이 topology 인식
3 replica, 2 partition
Sharding Through Coordinators
●
    Gizzard




    http://gywn.net/category/nosql/
Consistent Hash Rings
http://charsyam.wordpress.com/2011/11/25/memcached-%EC%97%90%EC%84%9C%EC%9
●
    H = hash function (key to integer)
●
    L = 1000
●
    A,B,C,D,E = 서버노드
     –   H(A) mod L = 7, H(B) mod L = 234, H(C) mod L = 447, H(D) mode L = 660,
         H(E) mod L = 875
●
    어떤 키가 어떤 머신에 속해야 하는지 알 수 있다 .
     –   H(‘employee30’) mod L = 899 ==> E
     –   H(‘employee31’) mod L = 234 ==> B
Consistent Hash Rings
            Replicating Data
●
    Replication factor 가 3 이라면 ?
●
    Range[7,234] 는 A 뿐만아니라 , B,C 에도 저장
    됨
Consistent Hash Rings
        Achieving Better Distribution
●
    Node 의 key range 가 불균형이다 .
    –   key range 를 hash function 에 의존
    –   A = 227, E = 132
    –   A 가 고장나면 B 가 440 를 관리하게됨
●
    Virtual node 개념
    –   A 는 A_1, A_2, A_3, A_4 의 합
    –   노드가 많아질수록 균등해짐
Range Partitioning
                        The BigTable Way
●
    Master Server
●
    3-level hierachy = 2^61 byte (128MB tablets)
●
    Handling Failures
     –   Master Server 는 sing failure point
     –   Machine failures 를 인식하기 위해 chubby, zookeeper 가 필요하다
          ●
              Managing server membership and liveness
Range Partitioning
Range Partitioning-based NoSQL Projects
●
    Hbase
    –   BigTable’s hierarchical approch to range-partiting
●
    MongoDB
    –   Configuration nodes = 라우팅 테이블 가짐
        ●
            이들간의 연산은 two-phase commit
●
    Cassandra
    –   Order-preserving partitioner
        ●
            해싱하지 않은 key 값으로 서버 결정
        ●
            순서가 비슷한 key 들은 하나의 머신에 들어감
        ●
            Fast range scan 이 가능
●
Which Partitioning Scheme to Use
●
    Range partitioning
    –   Range scans 이 종종 필요한 경우
    –   Key 순서대로 data 를 읽을 필요가 있는 경우
    –   랜덤 노드 접근을 안할때
    –   라우팅하고 configuration 노드 관리에 비용이 든
        다
    –   Single points of failure
    –   서버가 다운되었을때 , 로드가 이웃노드들에 전가
        되지 않고 퍼뜨릴 수 있다 . ( 이것은 hash
        partitioning 에서도 virtual 노드를 쓰면 된다 .)
●
    Hash Partitioning
consistency
●
    데이터를 여러 노드에 분산하는 것은 로드 밸런
    싱과 durability 에 좋지만 , consistency 에는 나
    쁘다
●
    Tow major approaches to data consistency
    –   Strong consistency
        ●
            All replicas remain in sync
    –   Eventual consistency
        ●
            언젠가는 모든 replicas 에게 sync 되지만 시간이 걸릴
            수 있다
Consistency
   CAP
Consistency
                             CAP
●
    Consistency
     –   모든 데이터베이스 클라이언트는 같은 쿼리에 대해 같은 값을 읽어야 한다 .
         (ACID 의 C 와 다름 )
●
    Availability
     –   모든 데이터베이스 클라이언트는 항상 데이터 읽기와 쓰기가 가능해야 한다
●
    Partition Tolerance
     –   데이터베이스는 다중 머신으로 분리되어도 동작해야 한다 . 즉 , 네트워크 일부
         가 장애상황이어도 기능을 계속 수행할 수 있어야 한다 .
Consistency
                     CAP
●
    분산 시스템은 셋 중 두가지만 강력하게 지원할
    수 있다
●
    CA
    –   2 단계 커밋
    –   네트웍 파티션시 시스템 블럭
    –   결국 단일 데이터 센터
●
    CP
    –   샤드
    –   노드 장애 발생시 일부 데이터 사용 못함
●
    AP
Strong Consistency
●
    R+W>N
    –   N = machine
    –   W = update 가 반영될 replica 수
    –   R = Read 요청을 위해 읽은 replica 수
●
    W=N
    –   하나의 replica fail 에도 write 가 hang 이 될 수 있
        다
●
    보통 R + W = N + 1
●
    W=N, R=1 인 선택을 많이 한다
    –   Sync 가 맞지 않은 상황을 피하려고 ...
Eventual Consistency
●
    R + W <= N
    –   Dynamo-based systems (Voldemort, Cassandra,
        Riak)
    –   N = machine
    –   W = update 가 반영될 replica 수
    –   R = Read 요청을 위해 읽은 replica 수
Eventual Consistency
             Versioning and Conflicts
●
    Key k 을 A,B,C 가 가지고 있다
●
    Clock vector(N_A, N_B, N_C)
●
    A 가 k 에 없데이트하면 N_A 값을 올린다 . 나머지 값은 전달받는다
●
    Conflict 에 탐지 ?
    –   A 가 vector clock 를 받았을때 , N_A 가 자기가 가진 값보다 작은데 , N_B 또는
        N_C 가 자기가 가진것보다 크면 conflict 를 탐지
    –   B4 이벤트이후 모두 conflict!
●
    Conflict 처리 ?
Eventual Consistency
                Conflict Resolution
●
    Dynamo, voldemort
    –   Application 이 알아서 해라
        ●
            Svn 에서 merge, 수동 conflict 처리 같이
●
    Cassandra
    –   모든 Key 에 timestamp
    –   쉽게 merge 할 수 있는 경우에 못하는게 아쉽
●
    Riak
    –   Voldemort, cassandra 방법 모두 지원
●
    Couch
    –   하이브리드
Eventual Consistency
              read repair
●
    Coordinator 가 read 할때 conflict 감지
●
    Conflict resolution protocols 를 보내서 해결
Hinted Handoff
●
    Node 가 temporarily unavailable 할때 다른 노
    드가 변경사항을 대신 받아서 저장해 두었다가
    새로운 replica 가 나타면 변경사항을 적용
●
    Sloppy quorum
    –   W 만큼의 write 까지 hinted handoff 적용
●
    Anti-Entropy
    –   오랫동안 replica 가 정상이 되지 않거나 , hinted
        handoff 를 가지고 있던 서버도 다운되는 경우 다른
        replica 로 데이터를 sync 해야 한다
●
    Gossip
    –

Más contenido relacionado

La actualidad más candente

데이터베이스의 이해
데이터베이스의 이해데이터베이스의 이해
데이터베이스의 이해Byung Kook Ha
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기beom kyun choi
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다민철 정민철
 
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기beom kyun choi
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxNeoClova
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
about hadoop yes
about hadoop yesabout hadoop yes
about hadoop yesEunsil Yoon
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPgDay.Seoul
 
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)Matthew (정재화)
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Gruter
 
Zeppelin notebook 만들기
Zeppelin notebook 만들기Zeppelin notebook 만들기
Zeppelin notebook 만들기Soo-Kyung Choi
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료beom kyun choi
 
Introduction to mongo db
Introduction to mongo dbIntroduction to mongo db
Introduction to mongo dbMinho Kim
 
Pg report 20161010_02
Pg report 20161010_02Pg report 20161010_02
Pg report 20161010_02PgDay.Seoul
 

La actualidad más candente (20)

데이터베이스의 이해
데이터베이스의 이해데이터베이스의 이해
데이터베이스의 이해
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
10장
10장10장
10장
 
Spark and Shark
Spark and SharkSpark and Shark
Spark and Shark
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
 
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기
 
Hadoop발표자료
Hadoop발표자료Hadoop발표자료
Hadoop발표자료
 
Hdfs
HdfsHdfs
Hdfs
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
about hadoop yes
about hadoop yesabout hadoop yes
about hadoop yes
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ff
 
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
Zeppelin notebook 만들기
Zeppelin notebook 만들기Zeppelin notebook 만들기
Zeppelin notebook 만들기
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
Introduction to mongo db
Introduction to mongo dbIntroduction to mongo db
Introduction to mongo db
 
SPARK SQL
SPARK SQLSPARK SQL
SPARK SQL
 
Pg report 20161010_02
Pg report 20161010_02Pg report 20161010_02
Pg report 20161010_02
 

Destacado

[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론
[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론
[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론Alex Hahn
 
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 AdvancedAmazon Web Services Korea
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제Tae Young Lee
 
Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈
Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈 Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈
Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈 Amazon Web Services Korea
 
MSA를 이용해 구현하는 고가용/고확장성 서비스
MSA를 이용해 구현하는 고가용/고확장성 서비스MSA를 이용해 구현하는 고가용/고확장성 서비스
MSA를 이용해 구현하는 고가용/고확장성 서비스DoHyun Jung
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처영기 김
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)Amazon Web Services Korea
 

Destacado (9)

[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론
[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론
[SW 아키텍처 컨퍼런스] 클라우드 아키텍처 개론
 
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제
 
Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈
Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈 Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈
Amazon RDS 살펴보기 (김용우) - AWS 웨비나 시리즈
 
MSA를 이용해 구현하는 고가용/고확장성 서비스
MSA를 이용해 구현하는 고가용/고확장성 서비스MSA를 이용해 구현하는 고가용/고확장성 서비스
MSA를 이용해 구현하는 고가용/고확장성 서비스
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
 

Similar a The nosql echossytem

제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30Donghan Kim
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
BigData Overview
BigData OverviewBigData Overview
BigData OverviewHoryun Lee
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018Amazon Web Services Korea
 
data platform on kubernetes
data platform on kubernetesdata platform on kubernetes
data platform on kubernetes창언 정
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGruter
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4Seok-joon Yun
 
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)InBum Kim
 
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)Amazon Web Services Korea
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK TelecomGruter
 
Lablupconf session7 People don't know what they want until LABLUP show it to ...
Lablupconf session7 People don't know what they want until LABLUP show it to ...Lablupconf session7 People don't know what they want until LABLUP show it to ...
Lablupconf session7 People don't know what they want until LABLUP show it to ...Lablup Inc.
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106SangHoon Lee
 
빅데이터, big data
빅데이터, big data빅데이터, big data
빅데이터, big dataH K Yoon
 

Similar a The nosql echossytem (20)

제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
BigData Overview
BigData OverviewBigData Overview
BigData Overview
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
 
3장
3장3장
3장
 
NoSQL
NoSQLNoSQL
NoSQL
 
data platform on kubernetes
data platform on kubernetesdata platform on kubernetes
data platform on kubernetes
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
 
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
 
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
 
Mongodb cluster
Mongodb clusterMongodb cluster
Mongodb cluster
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
 
Lablupconf session7 People don't know what they want until LABLUP show it to ...
Lablupconf session7 People don't know what they want until LABLUP show it to ...Lablupconf session7 People don't know what they want until LABLUP show it to ...
Lablupconf session7 People don't know what they want until LABLUP show it to ...
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
 
빅데이터, big data
빅데이터, big data빅데이터, big data
빅데이터, big data
 

The nosql echossytem

  • 1. The Architecture of OpenSource Applications: The NoSQL Ecosystem 아꿈사 박종석
  • 2. What’s in a name? ● No SQL – 기존의 RDBMS 가 아니다 . (sql 은 RDBMS 의 인 터페이스 ) ● Not only SQL – 기존의 RDBMS 의 대안이다 .
  • 3. SQL and the Relational Model ● SQL – 정보를 어떻게 가져오는지 보다 , 어떤 정보를 원하 는지를 기술하는 언어 – 유저는 실제로 데이터가 어떻게 저장되어있는지에 대해서는 신경쓰지 않는다 . ● 대신 어떤 데이터에 index 를 걸지 , 어떤 알고리즘으로 데이터를 프로세싱할지와 같은 추상화된 정보가 요구 ● 보통 query optimizer 가 좋은 성능을 발휘하지만 유저가 더 많은 정보를 제공해주면 좀 더 효율적이 된다 . (hint)
  • 4. SQL and the Relational Model ● RDBMS – 관계형 모델에 근거 ● 같은 entity 는 같은 속성을 가지고 하나의 table 로 저장 됨 – 데이터 이용은 데이터 구조 (schema) 에 영향을 끼 치지 않는다 ● 기존 모델 ( 계층형 , 네트워크 ) 에서는 데이터의 구조가 매우 중요했고 , 프로그래밍도 이것을 고려해야 했다 . ( 데이터를 이용하면서 구조가 변경되고 , 이것을 항상 숙지하고 있어야 원하는 데이터에 접근이 가능함 ) – 데이터와 프로그램이 분리가 가능하게됨 – 매우 구조화된 entity 와 그들간의 relationsships
  • 5. RDBMS 의 문제점 ● Sql 의 풍부한 표현력은 각 쿼리의 성능이나 , work load 를 예측하기 어렵게 만든다 – But, 간단한 query 만 지원하는 경우엔 어플리케이 션 로직이 복잡해짐 ● Strict 한 data 구조를 사용한다 – Object orient 데이터 구조나 dynamic data 구조 (list, queue, set) 에 적합하지 않다 ● Data 가 많아지게 되면 여러 컴퓨터 노드로 분 산을 시켜야 한다 – 여러 컴퓨터 노드 사이의 join 은 매우 어렵고 비 효 율적이기 때문에 결국 denormalization 을 해야 한
  • 6. RDBMS 는 대부분 좋다 ! ● 지금까지 많은 연구와 적용을 통해서 검증된 방 식 ● 만약 data 를 저장하고자 한다면 RDBMS 를 우선 고려 ● 하지만 특정 분야에서는 NoSQL 을 고려할 수 있다 . – 대용량의 데이터 – RDBMS 로 설계하기에 너무 복잡한 데이터 구조가 필요한 경우
  • 7. NoSQL Inspirations ● Google’s BigTable – Multi-column, range-based partitioning scheme, strict consistency ● Amazon’s Dynamo – Key-oriented distributed datastore(simpe key- value data model), eventually consistency ● NoSQL system 디자인에 큰 영향을 끼쳤다 – Hbase ● BigTable – Voldemort ● Dynamo
  • 8. Characteristics and Considerations ● Data and query model – Rows, objects, data structures or documents data? – 여러 record 에 동시에 접근하는 query? ● Durability – Data 변경이 즉시 stable storage 로 저장 ? – 하나의 머신이 예상치 못하게 crash 되었을때 또는 데이터 센터가 불에탔을때 데이터가 유지 ? ● Scalability – Data 가 오직 특정 머신에만 저장 ?
  • 9. Characteristics and Considerations ● Data and query model – Rows, objects, data structures or documents data? – 여러 record 에 동시에 접근하는 query? ● Durability – Data 변경이 즉시 stable storage 로 저장 ? – 하나의 머신이 예상치 못하게 crash 되었을때 또는 데이터 센터가 불에탔을때 데이터가 유지 ? ● Scalability – Data 가 오직 특정 머신에만 저장 ?
  • 10. Characteristics and Considerations ● Consistency – 여러 노드에 데이터가 분산 (partitioned or replicated) 되어 있을때 , data 변경을 어떻게 처리 할 것인가 ? ● Transactional semantics – ACID 를 어느정도 까지 지원할 것인가 ? – 비즈니스와 성능 요구의 tradeoff ● Single-server performance – Data 를 안전하게 disk 에 저장하려고 한다면 어떤 on-disk data structure 로 저장해야할까 ? – Read-heavy? Write-heavy?
  • 11. NoSQL Data and Query Models
  • 12. Key-based NoSQL Data Models ● 아무리 데이터가 복잡해도 , NoSQL 에서는 결 국 key 를 통해서 데이터를 찾게된다 – 이후 value 에 대한 연산 방법은 각 NoSQL 이 다 름 ● 데이터 표현하는 법 – Employee:30 ● 직원 id 가 30 인 레코드 – employee_departments:20 ● 20 번 부서 레코드 – 관계형모델의 예 (Join 사용 ) (todo:) – Key-value 모델의 예 (employee_departments 가
  • 13. Key-based NoSQL Data Models Key-Value Store ● Voldemort(based in Dynamo), BDB ● Value 가 어떤 정보인지에 대해서 NoSQL store 는 모른다 . ( 단지 payload) – Value 에 대한 연산을 제공하지 않음 – Application 에서 데이터 수정관련 모든 작업을 해야 함 ● Set, get, delete 외에 value 에 대한 어떤 연산 도 할 수 없다
  • 14. Key-based NoSQL Data Models Key-Data Structure Stores ● Redis ● 각 value 에 type 을 지정 – Integer, string, list, set, sorted set ● Set, get, delete 외에 Type-specific command 제공 – Integer ● Increment, decrement – Lists ● Push, pop ● 편리한 기능과 성능이 조화를 이룬다
  • 15. Key-based NoSQL Data Models Key-Document Stores ● CouchDB, MongoDB, Riak ● Document 는 많은 구조화된 정보를 가지고 있 는 데이터 ● JSON 또는 비슷한 형태로 저장 ● 자유로운 구조 ( 형태 ) 의 Document 를 만들 수 있지만 ... – 어플리케이션 로직이 복잡해진다
  • 16. Key-based NoSQL Data Models Key-Document Stores
  • 17. Key-based NoSQL Data Models BigTable Column Family Stores ● Hbase, Cassandra (BigTable) ● CF(Column Family) = 테이블과 비슷 – 논리적인 관련이 있는 column 을 묶어서 관리 ● Timestamp – 각 column 은 마지막 변경된 시간인 timestamp 를 가지고 있다 . ● Sparse column placement – 공간 절약 및 성능 향상
  • 18. Graph Storage ● Node, edge, property 로 구성 ● HyperGraphDB, Neo4J
  • 19. Complex Queries ● Key-value 의 단순쿼리가 아닌 sql 수준의 복 잡한 쿼리를 제공 ● MongoDB ● 참고 – SQL to MongoDB Mapping Chart – http://docs.mongodb.org/manual/reference/sql-comparis
  • 20. Transactions ACID ● Atomic( 원자성 ) – 연산은 성공 또는 실패 둘 중 하나 . 중간은 없다 ● Consistent( 일관성 ) – 비일관적인 데이터 상태를 트랜잭션이 보면 안된다 ● Isolated( 고립성 ) – 두개의 트랜잭션이 동시에 수행되어도 서로 연관을 주면 안된다 . 트랜잭션이 순서대로 수행된것 처럼 되어야 한다 ● Durable( 지속성 ) – 트랜잭션의 변경사항은 반영되어 남아있는다
  • 21. Transactions ACID 단점 ● ACID 는 성능 저하 요인이 된다 – long and slow 트랜잭션 하나는 전체 성능을 떨어 뜨린다 ● NoSQL 은 Performance 를 엄밀한 ACID 보다 중요하게 여긴다 – 하지만 key level 연산은 반드시 ACID 를 지킨다 ● To avoid serious key-value pairs corruption
  • 22. Data Durability ● 이상적인 경우 – 데이터 변경이 바로 안전한 디스크에 저장되고 , 지 리적으로 떨어진 디스크에도 곧바로 저장된다 ● 문제는 성능 ! – NoSQL 은 다른 방법 적용 – 성능과 Durability 수준에 대한 trade-off
  • 23. Single-server Durability ● Server restart or power loss 에서 데이터 변경 을 보장 – 메모리에만 저장하지 말고 디스크에도 저장해야함 ● Fsync – 매번 디스크에 접근하는 비용이 비싸기 때문에 , 실 제로는 write 를 해도 디스크에 쓰지 않고 fsync 를 할때에 디스크에 저장
  • 24. Single-server Durability Control fsync frequency ● Memcached – 오직 메모리에서만 처리 – Single-server failure 시 데이터 사라짐 – 하지만 매우 빠름 ● Redis – fsync frequency 조절 가능 ● Every update ● every N seconds ( 최악의 경우 ? 최근 N 초간 데이터 날라감 ) ● entirely turn off fsync ( 언젠가는 disk 에 반영됨 )
  • 25. Single-server Durability Increase Sequential Writes by Logging ● B+Tree – Data 인덱싱에 사용 – B+Tree 의 update 는 여러 페이지에 산재되어 나타 남 (Random access) ● 디스크는 쓰는량보다 접근 횟수에 크리티컬 ● Log – 연산을 디스크에 바로하지 않고 , 로그로 저장한다 – 예를 들면 , 100 개 페이지에 대한 연산을 1 번의 write 로 끝냄 ( 성능 대략 100 배 향상 ) – 서버 failure 시에 로그를 통해 상태 복구 (redo)
  • 26. Single-server Durability Increase Throughput by Grouping Writes ● Group commit – 한번의 fsync 로 여러 트랜잭션을 동시에 commit – 한 페이지에 동시에 여러 트랜잭션이 접근한 경우 에 가능 – 처음에 끝났어야 하는 트랜잭션은 , 나중에 온 트랜 잭션이 끝날때까지 기다려야 함 . – Latency 는 증가하지만 전체 throughput 은 상승 – 성능과 Durability 두개를 모두 만족 (Hbase) ● Fsync 가 끝나야지 commit
  • 27. Multi-server Durability Master-slave ● Redis ● Master 가 log 형태로 slave 로 데이터 전달 ● Master 가 고장나면 slave 의 데이터를 사용가능 ● Data loss 일어날 가능성 있다 (slave 복사 완료까지 기다리지 않음 ) ● Master 는 write, Slave 는 read 로 부하를 분산하기도 한다
  • 28. Multi-server Durability Replica set ● MongoDB – Master 가 고장나면 slave 중 하나가 master 가 되고 , master 가 복구되면 slave 가 되는데 , 이 과정이 자동으로 이루어 진다 – Master 는 update 가능 , slave 는 read 만 ● 하지만 , 모든 노드에 update 가능한 옵션 설정 가능 – Replica 들이 최신이 데이터가 아니어도 그냥 진행 가능 옵션도 설정 가능 ● Hbase – Master 에 대한 연산이 완전히 Slave 로 반영될때까지 연산 완료 안함 ● 느리지만 안정적
  • 29. Multi-server Durability configurable form of replication ● Riak, Cassandra, Voldemort ● N = 데이터가 copy 되는 개수 ● Update 에 대한 데이터가 다른 머신에 반영되 는 갯수 W 조절가능 ● Example – N =3, W=2 ● 하나의 데이터는 3 개의 copy 를 가지고 있다 . ● 그 데이터에 update 가 일어나면 , 최소한 2 개의 copy 가 모두 반영될때까지 완료하지 않는다 ● 전체 데이터 센터가 고장날때를 대비해서
  • 30. Scaling for Performance ● Scale up – 머신의 성능을 높임 – 프로그램 복잡도 전혀 올라가지 않는 장점 – 효과대비 비용이 비싸고 , 성능 향상에도 한계가 있 다 ● Scale out – 머신을 계속해서 붙여나갈 수 있게함 – 프로그램이 복잡해짐 ● 대부분의 NoSQL 을 쓰면 쉽게 해결됨 (key-value 특성 상 다른 데이터에 의존성이 적기 때문 ) – 성능 향상에 한계가 없다 .
  • 31. Do Not Shard Until You Have To ● 복잡하기때문 ● 샤딩 없이 가능한 방법 – Read Replicas ● 앞서 설명한 master-slave – Caching ● 여러개의 Memcached host 를 사용 ● Scaling 을 지원하는 persistent solution 의 복잡함이 없 다 ● Read heavy workload 로 memcached 를 쓴다 ● Write 오버헤드는 master server 로 몰린다
  • 32. Sharding Through Coordinators ● CouchDB – 각 CouchDB Instance 간에는 서로는 인식하지 않음 – Proxy 의 ConfigDB(Lounge and BigCouch) 가 client 의 요 청을 받아서 각 CouchDB 로 중계 – 장점 ? 심플 , 관심사 분리 ConfigDB 만이 topology 인식 3 replica, 2 partition
  • 33. Sharding Through Coordinators ● Gizzard http://gywn.net/category/nosql/
  • 34. Consistent Hash Rings http://charsyam.wordpress.com/2011/11/25/memcached-%EC%97%90%EC%84%9C%EC%9 ● H = hash function (key to integer) ● L = 1000 ● A,B,C,D,E = 서버노드 – H(A) mod L = 7, H(B) mod L = 234, H(C) mod L = 447, H(D) mode L = 660, H(E) mod L = 875 ● 어떤 키가 어떤 머신에 속해야 하는지 알 수 있다 . – H(‘employee30’) mod L = 899 ==> E – H(‘employee31’) mod L = 234 ==> B
  • 35. Consistent Hash Rings Replicating Data ● Replication factor 가 3 이라면 ? ● Range[7,234] 는 A 뿐만아니라 , B,C 에도 저장 됨
  • 36. Consistent Hash Rings Achieving Better Distribution ● Node 의 key range 가 불균형이다 . – key range 를 hash function 에 의존 – A = 227, E = 132 – A 가 고장나면 B 가 440 를 관리하게됨 ● Virtual node 개념 – A 는 A_1, A_2, A_3, A_4 의 합 – 노드가 많아질수록 균등해짐
  • 37. Range Partitioning The BigTable Way ● Master Server ● 3-level hierachy = 2^61 byte (128MB tablets) ● Handling Failures – Master Server 는 sing failure point – Machine failures 를 인식하기 위해 chubby, zookeeper 가 필요하다 ● Managing server membership and liveness
  • 38. Range Partitioning Range Partitioning-based NoSQL Projects ● Hbase – BigTable’s hierarchical approch to range-partiting ● MongoDB – Configuration nodes = 라우팅 테이블 가짐 ● 이들간의 연산은 two-phase commit ● Cassandra – Order-preserving partitioner ● 해싱하지 않은 key 값으로 서버 결정 ● 순서가 비슷한 key 들은 하나의 머신에 들어감 ● Fast range scan 이 가능 ●
  • 39. Which Partitioning Scheme to Use ● Range partitioning – Range scans 이 종종 필요한 경우 – Key 순서대로 data 를 읽을 필요가 있는 경우 – 랜덤 노드 접근을 안할때 – 라우팅하고 configuration 노드 관리에 비용이 든 다 – Single points of failure – 서버가 다운되었을때 , 로드가 이웃노드들에 전가 되지 않고 퍼뜨릴 수 있다 . ( 이것은 hash partitioning 에서도 virtual 노드를 쓰면 된다 .) ● Hash Partitioning
  • 40. consistency ● 데이터를 여러 노드에 분산하는 것은 로드 밸런 싱과 durability 에 좋지만 , consistency 에는 나 쁘다 ● Tow major approaches to data consistency – Strong consistency ● All replicas remain in sync – Eventual consistency ● 언젠가는 모든 replicas 에게 sync 되지만 시간이 걸릴 수 있다
  • 41. Consistency CAP
  • 42. Consistency CAP ● Consistency – 모든 데이터베이스 클라이언트는 같은 쿼리에 대해 같은 값을 읽어야 한다 . (ACID 의 C 와 다름 ) ● Availability – 모든 데이터베이스 클라이언트는 항상 데이터 읽기와 쓰기가 가능해야 한다 ● Partition Tolerance – 데이터베이스는 다중 머신으로 분리되어도 동작해야 한다 . 즉 , 네트워크 일부 가 장애상황이어도 기능을 계속 수행할 수 있어야 한다 .
  • 43. Consistency CAP ● 분산 시스템은 셋 중 두가지만 강력하게 지원할 수 있다 ● CA – 2 단계 커밋 – 네트웍 파티션시 시스템 블럭 – 결국 단일 데이터 센터 ● CP – 샤드 – 노드 장애 발생시 일부 데이터 사용 못함 ● AP
  • 44. Strong Consistency ● R+W>N – N = machine – W = update 가 반영될 replica 수 – R = Read 요청을 위해 읽은 replica 수 ● W=N – 하나의 replica fail 에도 write 가 hang 이 될 수 있 다 ● 보통 R + W = N + 1 ● W=N, R=1 인 선택을 많이 한다 – Sync 가 맞지 않은 상황을 피하려고 ...
  • 45. Eventual Consistency ● R + W <= N – Dynamo-based systems (Voldemort, Cassandra, Riak) – N = machine – W = update 가 반영될 replica 수 – R = Read 요청을 위해 읽은 replica 수
  • 46. Eventual Consistency Versioning and Conflicts ● Key k 을 A,B,C 가 가지고 있다 ● Clock vector(N_A, N_B, N_C) ● A 가 k 에 없데이트하면 N_A 값을 올린다 . 나머지 값은 전달받는다 ● Conflict 에 탐지 ? – A 가 vector clock 를 받았을때 , N_A 가 자기가 가진 값보다 작은데 , N_B 또는 N_C 가 자기가 가진것보다 크면 conflict 를 탐지 – B4 이벤트이후 모두 conflict! ● Conflict 처리 ?
  • 47. Eventual Consistency Conflict Resolution ● Dynamo, voldemort – Application 이 알아서 해라 ● Svn 에서 merge, 수동 conflict 처리 같이 ● Cassandra – 모든 Key 에 timestamp – 쉽게 merge 할 수 있는 경우에 못하는게 아쉽 ● Riak – Voldemort, cassandra 방법 모두 지원 ● Couch – 하이브리드
  • 48. Eventual Consistency read repair ● Coordinator 가 read 할때 conflict 감지 ● Conflict resolution protocols 를 보내서 해결
  • 49. Hinted Handoff ● Node 가 temporarily unavailable 할때 다른 노 드가 변경사항을 대신 받아서 저장해 두었다가 새로운 replica 가 나타면 변경사항을 적용 ● Sloppy quorum – W 만큼의 write 까지 hinted handoff 적용 ● Anti-Entropy – 오랫동안 replica 가 정상이 되지 않거나 , hinted handoff 를 가지고 있던 서버도 다운되는 경우 다른 replica 로 데이터를 sync 해야 한다 ● Gossip –