제 블로그의 모든 글은 IMHO로 쓴 것입니다. 서로에 대한 존중을 담은 덧글을 남겨 소통을 하신다면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 존중이 담기지 않은 덧글은 언제든 삭제될 수 있습니다. 감사합니다:)
—
NoSQL이란?
- nosql은 기본적으로
Not-only SQL
의 약자이다. - 즉 RDMS형태가 아닌 디비는 전부 NoSQL이다.
- ACID(Atomic, Consistency, Integrity, Duarabity)특성을 어느정도 포기하고 확장성 있는 데이터베이스를 설계하기 좋은 데이터베이스
NoSQL의 등장 배경
고객들의 log를 기반으로 수많은 데이터들을 축적하게 되면서 지속적으로 많은 양의 데이터가 축적되었다.
기존에 있었던 rdbms의 경우 정규화, 구조화, 신뢰성을 focus해서 개발이 되었었다.
즉 회원의 최소정보나, 물품의 양같은 경우 해당 디비를 쓰는 것이 효율성이 좋았다. 그러나 데이터 패러다임의 변화로 데이터의 복잡도와 양이 늘어나게 되었으며 기존에 서버를 유지하던 방식은 점점 한계에 부딪치게 되었다. log성 데이터들은 ACID의 특성이 중요하지 않고, 검색 혹은 질의 최적화 등 다른 것에 집중하고 싶은 디비를 개발하고 싶게 되었다.
그렇게 탄생하게 된 것이 바로 nosql이다.
핫해지면 뭔가가 개발된다.
대용량 데이터를 다루기 위해 탄생한 nosql 병렬컴퓨팅 방법론
에 최적화된 디비이다.
그러면서 그 데이터를 다룰 수 있는 기술이 발전이 되는데 가장 기저가 되는 기술은 멀티코어
와 병렬컴퓨팅 방법론
이다.
멀티 코어
태초에는(?) 한 컴퓨터에 하나의 CPU를 사용했었다.
그런데 인간의 욕심은 끝이 없어 사람들은 더 많은 연산을 더 많은 빠르게 처리를 하고 싶게 되었다.
그러면서 한 컴퓨터에 한 CPU가 아닌 2개 4개 8개등 멀티코어를 원하게 되었다.
근데 이 멀티코어도 어느정도 한계가 있다.
일단 cpu를 여러대 연결한다고 속도가 정확히 비례해서 오른다는 보장이 없다.
한 컴퓨터에 cpu를 1000개 꽂는다고 1000배 빨라질 수가 없다.
왜냐하면 그렇게 되면 각 자원들을 돌아가면서 스케줄링을 잘 해야하는데, 그러기에는 구현복잡도가 늘어나게 된다.
또한 cpu의 한 칩에 대한 성능 향상의 속도가 데이터가 불어나는 속도를 따라잡지 못했다.
한 컴퓨터 갇히냐 / 여러 컴퓨터에 갇히 그렇지만애플이m1을만들었는데
병렬컴퓨팅에 최적화된 데이터베이스를 만들고 싶어서 만든 것이 nosql이다.
거대한 데이터를 다루기 위해 방법론 결국 멀티코어에는 한계가 있으니 그다음에 개발되던 곳은 병렬컴퓨팅 방법론이었다.
서버에 부하가 있을 때 버틸 수 있는 방법은 기본적으로 개발 리소스의 성능을 늘리는 scale up과 리소스의 개수를 늘리는 scale-out이 있다. up의 경우 하드웨어 발전에 한계가 있어 out이 적합한 방법이 되어 해당 기술에 대한 발달이 꾸준히 일어나고 있다. 이 과정에서 이제 RDBMS는 적합한 database가 아니어서, NoSQL이 생겨나게 되었다. 어느정도 신뢰성을 포기하고(그로인해 CAP이론이 생겨났다) 속도를 잡는 것이다.
그래서 RDBMS가 Scale-Out이 힘든 이유를 다시한번 정리하자
- RDBMS는 scale out 을 설계하고 만들어지지 않았다.
- Query Off Loading - 복제에 의한 확장을 사용할 경우
- Master-Slave 구조에서는 결과를 Slave의 갯수만큼 복제해야 하는데 N개의 Slave에서 읽 을 수 있기 때문에 Read는 빠르지만 Write에서는 병목현상이 발생하기 때문에 확장성에 대 한 제한을 가지게 된다.
- 다중 마스터구조에서는 마스터를 추가함으로써 쓰기의 성능을 향상시킬 수 있는데 대신에 충돌이 발생할 가능성이 생기게 된다.
- Partitioning(Sharding) - 분할에 의한 확장을 사용할 경우
- Read만큼 Write도 확장할 수 있지만 애플리케이션 레이어에서 파티션된 것을 인지하고 있 어야 한.
- RDBMS의 가치는 관계에 있다고 할 수 있는데 파티션을 하면 이 관계가 깨져 버리고 각 파티션된 조각간에 조인을 할 수 없기 때문에 관계에 대한 부분은 애플리케이션 레이어에서 책임져야 한다.
- 일반적으로 RDBMS에서 수동 Sharding 은 쉽지 않다.
nosql이 scale out이 쉬운 이유는?
- rdbms는 acid중 Atomicity를 지켜야 하기 때문에, 계속 데이터를 확인해야하는데 그것이 필요가 없는 nosql은 테이블 쪼개지 않고 큰 테이블에 모두 담아서 저장한다.
- 한 테이블을 여러 서버에 나누어 저장하는 sharding이 쉬워지는 효과가 나타난다.
출처: https://jwprogramming.tistory.com/70 [개발자를 꿈꾸는 프로그래머]
- 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID(Atomic, Consistency, Integrity, Duarabity)특성 전부를 제공하지 않는 데이터베이스 -> 애매하다.
그렇지만 뛰어난 확장성이나 성능 등의 특성을 갖는 수많은 비관계형, 분산 데이터 베이스들이며 CAP이론을 따르는 데이터 베이스
CAP이론 이 이론은 2002년 버클리대학의 Eric Brewer 교수에 의해 발표된 분산 컴퓨팅 이론으로, 분산 컴퓨팅 환경은 Consistency, Availability, Partitioning 세 가지 특징을 가지고 있으며, 이중 두 가지만 만족할 수 있다는 이론이다.
- Consistency는 분산된 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야 한다는 기능적 특징이다(데이터 복제 중에 Query가 되면, Consistency를 제공하지 않는 시스템의 경우 다른 데이터 값이 Query 될 수 있다).
- Availability는 클러스터링된 노드 중 하나 이상의 노드가 FAIL이 되더라도, 정상적으로 요청을 처리할 수 있는 기능을 제공하는 특징이다.
- Partition Tolerance는 클러스터링 노드 간에 통신하는 네트워크가 장애를 겪더라도 정상적으로 서비스를 수행할 수 있는 기능이다.