2019-12-16

2019-12-12 피드백 || RDB 와 NO-sql

2019-12-12 피드백 || RDB 와 NO-sql

RDB (Relational Database)

ACID rules

  • 원자성(Atomicity) - 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것
  • 일관성(Consistency) - 트랜잭션 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
  • 고립성(Isolation) - 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것
  • 지속성(Durability) - 성공적으로 수행된 트랜잭션은 영원히 반영되는 것

NO-sql (Not Only SQL)

Key-Value

DynamoDB에 키-값 쌍으로 저장된 데이터의 예를 보여주는 다이어그램

  • Set 처럼 자료 저장

document

[
    {
        "year" : 2013,
        "title" : "Turn It Down, Or Else!",
        "info" : {
            "directors" : [ "Alice Smith", "Bob Jones"],
            "release_date" : "2013-01-18T00:00:00Z",
            "rating" : 6.2
        }
    },
    ....
    {...}
]
  • json 과 같은 비슷한 형태

그래프

소셜 네트워크 그래프의 사례

인 메모리

  • 디스크 대신 RAM에 저장
  • 휘발성

RDB vs NO-sql

관계형 데이터베이스 NO-sql 데이터베이스
최적의 워크로드 관계형 데이터베이스는 트랜잭션 및 강력히 일관된 온라인 트랜잭션 프로세싱(OLTP) 애플리케이션을 위해 설계 NoSQL 키 값, 문서, 그래프 및 인 메모리 데이터베이스는 낮은 지연 시간의 애플리케이션을 포함한 수많은 데이터 액세스 패턴에 맞도록 OLTP를 위해 설계되었습니다. NoSQL 검색 데이터베이스는 반정형 데이터에서 분석을 위해 설계되었습니다
데이터 모델 테이블, 행, 열, 인덱스, 테이블 간 관계, 기타 데이터베이스 요소를 정확하게 규정 문서, 그래프, 키 값, 인 메모리, 검색 등 다양한 데이터 모델
ACID 속성 ACID(atomicity, consistency, isolation, durability)의 속성을 제공 관계형 데이터베이스의 일부 ACID 속성을 완화
성능 디스크 하위 시스템에 따름. 쿼리, 인덱스, 테이블 구조 최적화 필요 하드웨어 클러스터 크기, 네트워크 지연 시간 및 호출 애플리케이션에 따름
확장 머신성능 향상 분산형 아키텍처
API 요청 SQL(구조화 질의 언어)을 준수하는 쿼리 객체 기반 API

성능

데이터 모델 성능 확장성 유연성 복잡성 기능
키-값 스토어 높음 높음 높음 없음 가변적 (없음)
컬럼 지향 스토어 높음 높음 준수 낮음 최소
도큐먼트 지향 스토어 높음 가변적 (높음) 높음 낮음 가변적 (낮음)
그래프 데이터베이스 가변적 가변적 높음 높음 그래프 이론
관계형 데이터베이스 가변적 가변적 낮음 준수 관계대수

2019-12-14

2019-12-12 피드백 || API 요청조절 - 스로틀링(Throttling), 디바운스(Debounce)

2019-12-12 피드백 || API 요청조절 - 스로틀링(Throttling), 디바운스(Debounce)

스로틀 (Throttle)

정해진 시간보다 많은 요청을 제한적 수용

디바운스 (Debounce)

연속적인 요청 발생 후 일정 시간 후 수용

버킷 알고리즘

FIFO 큐 형태로 패킷을 버킷에 담듯 쌓아서 처리 알고리즘에 따라 패킷제어

토큰 버킷 (Token bucket)

https://i.imgur.com/XCfQQ0K.png
정해진 양의 토큰을 순환적으로 전달될 요청에 담아 토큰을 포함한 요청만 처리하는 패킷제어

소요시간 계산식
time = bucketSize ÷ (packetRate - tokenArrivalRate) × 1000m

리키 버킷 (Leaky Bucket)

Leaky Bucket
최대 대역폭을 정해 일정한 요청이 발생하도록 패킷제어

초기값

limit = 1000
packet = [200, 700, 500, 450, 400, 200]

limit 을 초과하지 않는 패킷을 network로 전송

limit = 1000 - 200 = 800
packet = [200, 700, 500, 450, 400]
limit = 1000 - 400 = 400
packet = [200, 700, 500, 450]

pacaket[firstIn] > limit 인 경우, 절차 중단후 limit = 1000 으로 초기화 후 다음 절차 진행

소요시간 계산식
time = bucketSize × packetRate ÷ 1000m

참조

Written with StackEdit.