본문 바로가기

데이터베이스(DA, AA, TA)/대용량DB

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

프로그래머를 위한 대규모 데이터 기초


지금까지 살펴본 바와 같이 대규모 데이터는 메모리에서 처리하기 어렵고 디스크는 느립니다. 또한 분산하기도 곤란하다는 어려움도 있습니다. 그렇지만 힘들다고 해서 숟가락을 내던질 수는 없습니다.


대규모 데이터를 다루는 방법은 두가지 관점에서 바라볼 수 있습니다.


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

[2] 프로그램 개발의 근간이 되는 기초라는 점에서 전제로서 알아두었으면 하는 것




대규모 데이터를 다루는 세 가지 급소


대규모 시스템을 고민하게 만드는 대규모 데이터를 다루는 포인트는 '어떻게 하면 메모리에서 처리를 마칠 수 있을까?'라는 점입니다. 메모리에서 처리를 마쳐야 하는 이유는 앞서 설명한 대로 디스크 seek 횟수가 확장성, 성능에 크게 영향을 주기 때문입니다. 디스크 seek 횟수를 최소화한다는 의미로 메모리를 활용하고자 합니다. 그 다음으로 국소성을 활용한 분산도 있습니다.


대규모 데이터를 다루는 두번째 포인트는 데이터량 증가에 강한 알고리즘을 사용하는 것입니다. 레코드 1,000만 건이 있을 때 단순히 선형탐색으로 하면 1,000만 번 계산을 수행해야 하는데, Log Order인 알고리즘을 적용하면 수십 번 만에 마칠 수 있다는 기본적인 예가 있습니다. 이렇게 알고리즘의 기초적인 부분을 제대로 활용하면 됩니다.


세번째 포인트는 데이터 압축이나 검색기술과 같은 테크닉이 활용될 수 있는 국면이 있습니다. 단적으로 말하면 압축해서 데이터량을 줄일 수 있다면 읽어내는 seek 횟수도 적어지게 되므로 디스크 읽는 횟수를 최소화 할 수 있습니다. 또한 메모리에 캐싱하기 쉬워집니다. 데이터가 크면 메모리에서 넘치거나 디스크에 저장해도 읽어내기에 시간이 걸리므로 압축이 중요해집니다.


또한 검색이 중요한 이유는 확장성 면에서 DB에만 맡겨서 해결할 수 없을 때, 특정 용도에 특화된 검색 엔진 등을 만들어 해당 검색 시스템을 웹 애플리케이션에서 이용하는 형태로 전환한다면 속도를 제대로 확보할 수 있기 때문입니다. 이러한 이유로 압축과 검색이 중요합니다.


대규모 데이터를 다루기 위한 급소

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

 - 디스크 seek 횟수 최소화 하기

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

(2) 데이터량 증가에 강한 알고리즘, 데이터 구조

 - 선형탐색 -> 이분검색

 - O(n) -> O(nlogn)

(3) 데이터 압축, 정보검색기술



대규모 데이터를 다루기 전 3대 전제지식 - low level 기초


프로그램을 만드는 입장에서는 알고리즘, 압축, 검색 등이 중요합니다. 또한 프로그램 개발에 근간이 되는 기초라는 점에서 알아두었으면 하는 것들이 세가지 존재합니다.


OS캐시, 분산을 고려해서 RDBMS를 운용할 때는 어떻게 해야하만 하는가라는점. 그리고 대규모 환경에서 알고리즘과 데이터 구조를 사용한다는 것은 어떤 것인가라는 관점에서 접근하면 됩니다.


서버 대수가 많다고 해서 빠른것도 아니며, DB 서버가 I/O 부하의 규모조정이 어렵기 때문에 DB 서버 쪽이 반드시 대수가 많아지는 것은 아닙니다. DB 서버를 늘리는 것과 동기화가 어려워지는 것은 서로 유관합니다. AP 서버는 늘리면 늘릴수록 점점 빨라지므로 부족해지면 늘리면 그만입니다. 반면 DB서버는 늘리더라도 의미가 없는 경우가 자주 있습니다.