대규모 데이터로의 쿼리

데이터가 많으면 쿼리를 처리하는데 시간이 걸린다. -> 직감으로는 알겠으나 왜 그런지를 이해해두는 것이 중요

 

많은 시행착오를 통해 대규모 데이터를 다루는 감각이 필요하다.

대규모 데이터 처리의 어려운 점

메모리 내에서 계산할 수 없다 -> 메모리보다 처리속도가 느린 디스크에 있는 데이터를 검색

디스크는 느리므로 I/O 에 시간이 걸린다.

* 메모리는 디스크보다 10만~ 100만배 이상 빠르다.

 

디스크는 왜 늦을까?

물리적인 동작을 수반  - 원반의 회전, 헤드의 이동

물리적인 구조에 따른 탐색속도 저하  - 원하는 위치에 있는 데이터를 찾기 위해 회전 필요

메모리보다 많이 늦은 전송속도(버스의 속도차)

  • 탐색속도에 영향을 주는 요인
    • 헤드의 이동과 원반의 회전이 필요
    • 디스크에 배치되었는 데이터들의 위치 ( 뿔뿔이 흩어져 있으면 찾기위해 많은 회전과 이동이 필요)

메모리 - 1회 탐색시 마이크로초, 물리적인 동작 필요없음

 

▶▶ 메모리와 디스크 속도차를 생각하고 애플리케이션을 만드는 것이 중요

 

규모조정의 요소

메모리와 디스크의 속도차와 같은 사항들이 시스템 전체의 확장성 전략에 어떤 영향을 주는가를 알아보는 장

 

스케일업 과 스케일아웃

  • 스케일 업 : 고가의 빠른 하드웨어를 사서 구매하여 성능을 향상시키는 방식
  • 스케일 아웃 : 일반적인 하드웨어를 나열하여 성능을 향상시키는 방식
    • 주로사용하는 방식
    • 이유
      • 저렴하다
      • 웹 서비스에 적합한 구조다
      • 시스템 구성에 유연하다.

CPU 부하와 I/O 부하

  • CPU 부하 : 스케일 아웃을 이용하여 부하 완화 가능
    • AP 서버, 웹 이 해당
    • 같은 구성의 서버를 늘리고 로드밸랜서를 이용하여 분산
  • I/O 부하 : 확장을 하여 분산으로 완화하기 어렵다
    • DB 가 해당
    • 스케일 아웃을 하면 어떻게 데이터를 동기화하고 안정성을 유지할 것인지 고민이 필요

대규모 데이터를 다루기위한 기초지식

프로그램을 작성할 때의 요령

1. 어떻게 하면 메모리에서 처리를 마칠 수 있을까?를 고민

- 디스크 seek 횟수 최소화

- 국소성을 활용한 분산 실형

 

2. 데이터량 증가에 강한 알고리즘 사용

- 이분 검색

-

3. 데이터 압축혹은 검색기술과 같은 테크닉을 활용

 

대규모 데이터를 다루기 전 3 대 전제 지식

1. OS 캐시

2. 분산을 고려한 RDBMS 운용

3. 알고리즘과 데이터 구조

 

대규모 서비스에만 있는 문제 혹은 어려움

  1. 확장성 확보 와 부하 분산 필요
    • 스케일 아웃  - 서버의 역할을 분담하거나 서버 대수를 늘림으로 써 시스템의 처리 능력을 높이는 방법
      • 장점 : 비용 절감
      • 단점
        • 요청 분배는 어떻게 할 것인가?
        • 데이터 동기화는 어떻게?
        • 통신 지연시간은 어떻게?
  2. 다중성 확보  - 특정 서버가 고장나거나 성능이 저하되어도 서비스를 계속 할 수 있는 구성
  3. 효율적인 운용 필요 - 대규모 시스템을 건강한 상태로 얼마나 유지할 수 있을 것인가?에 대한 운용

대규모 데이터량에 대한 대처

데이터 처리 과정

     디스크 > 메모리 > 캐시 메모리 > CPU

 

 데이터 처리량이 많아지면?

    저속의 디스크로 I/O 이 많이 발생

→ 디스크 I/O 에 대기에 들어선 프로그램은 읽기가 완료될때 까지 다음 처리 불가

 시스템 전체의 성능이 저하

 

대규모 데이터 처리시 고민해야할 것들

  • 어떻게 하면 데이터를 적게 가져갈 수 있을까?
  • 여러 서버로 분산시킬 수 있을까?
  • 필요한 데이터를 최소한의 횟수로 읽어 들일 수 있을까?
  • 등등

 

bash 환경에서 사용되는 명령어

man 명령어 보다 진보된 형태로 더 상세한 내용을 제공

노드의 계층구조로 이루어진 정보를 출력

노드간의 이동이 가능

 

$ info < 명령어 이름>

 

노드 이동 방법

단축키 내용
n  동일 계층 단위로 다음 노드로 이동
p  동일 계층 단위로 이전 노드로 이동
[  하위 계층 단위로 다음 노드로 이동
]  하위 계층 단위로 이전 노드로 이동
u  상위 노드로 이동
t  Top 노드로 이동

 

스크롤 방법

단축키 내용
space 바  한 화면씩 밑으로 스크롤, 노드의 맨끝에서는 다음 노드로 이동
Backspace 키 / Delete 키   한 화면씩 위로 스크롤, 노드의 맨 앞에서는 이전 노드로 이동
Ctrl + v  한 화면씩 밑으로 스크롤
meta(option) + v  한 화면씩 위로 스크롤
meta + <  노드의 첫 부분으로 이동
meta + >  노드의 끝 부분으로 이동 

  * option 키를 meta 로 설정하는 방법 : https://support.apple.com/ko-kr/guide/terminal/trml107/2.14/mac/14.0

 

커서이동

단축키  내용
ctrl + n 다음 행으로 이동
ctrl + p
이전 행으로 이동
ctrl + f 다음 글자로 이동
ctrl + b 이전 글자로 이동
ctrl + a 행의 맨 앞으로 이동
ctrl + e 행의 맨 끝으로 이동

 

 

링크(참조)로 이동 방법

    링크를 포함하는 행은 * 로 시작

단축키 내용
Tab  다음 링크로 커서 이동
meta(option) + Tab  이전 링크로 커서 이동
Enter  링크된 노드로 이동
l (L 소문자)  이전 노드로 복귀

yum, apt-get, 레포지터리

 

Repository ?

패키지 파일을 모아서 배포하는 사이트

깃의 리포지터리와 달리 단순히 파일을 모아서 배포하는 곳을 의미.

 

 

yum 명령어 (CentOS)

레드햇 계열의 리눅스 배포판에서 rpm 이라는 패키지 파일 형식을 사용

rpm 명령어로는 단순한 조작만 가능하기 때문에 yum 이 많이 사용되고 있음

 

사용법

yum [옵션] [명령어] [패키지 이름]

 

옵션 명령어 내용
install   패키지 설치
-y 패키지 설치 중간에 나오는 y/d/N 을 입력해야하는 상황에서 y가 입력됨
erase/remove -y  패키지 삭제할때 자동으로 y를 입력해줌
search   [ 패키지 이름] 을 검색 → 패키지 이름과 요약을 출력
  all  패키지 이름 , 요약, 설명까지 출력
info   패키지의 상세정보를 출력 → 패키지 버전, 크키, URL 등등

 

apt 명령어 (우분투)

데비안(Debian) 계열의 리눅스 배포판에서 deb 이라는 패키지 파일 형식을 사용

 

apt( Advanced Packaging Tool)

  • apt-get : 설치와 삭제를 위한 명령어
  • apt-cache : 검색하고 정보를 확인하기 위한 명령어

사용법

apt-get       [옵션] [명령어] [패키지 이름]
apt-cache  [옵션] [명령어] [패키지 이름]

 

슈퍼 사용자 권한   명령어 내용
sudo apt-get  install 패키지 설치
remove 패키지 삭제
purge 패키지 설정파일 포함하여 삭제
  apt-cache search 패키지 이름 검색
show 패키지의 상세 정보

zip 은 아카이브와 압축을 동시에 수행하는 명령어

사용전 설치

$ sudo apt-get install zip unzip

 

명령어 사용

zip  -r  <압축 결과의 파일 이름>  <압축 대상의 경로>

 

압축 ( -r/ -rq)

$ zip -r dir1.zip dir        // 대상 파일 이름을 출력하지 하면서 실행
$ zip -rq dir1.zip dir       // 대상 파일 이름을 출력하지 않으면서 실행

 

압축 파일 내용 확인 ( zipinfo)

$ zipinfo dir1.zip

 

압축 해제 ( unzip /  unzip -q)

$ unzip dir1.zip       // 대상 파일이름 출력하면서 수행
$ unzip -q dir1.zip    // 대상 파일 이름 출력하지 않고 수행

 

암호 설정 ( -er / -erq)

$ zip -er dir1.zip dir1      // 대상 파일 이름을 출력하면서 수행
$ zip -erq dir1.zip dir1     // 대상 파일 이름을 출력 안하면서 수행

 

+ Recent posts