테이블에 데이터를 저장한다는 아이디어는 꽤 직설적이지만,
비구조화된 데이터를 저장하는 방식으로 가장 알맞는 방식은 아닐 겁니다.
따라서, 이러한 경우와 많은 다른 경우들에서,
NoSQL 데이터베이스가 종종 사용됩니다.
또한 NoSQL 데이터베이스는 성능을 향상시켜주며,
몇 가지 방식으로 개발을 용이하게 해 줍니다.
NoSQL 데이터베이스들은 상당한 양의 데이터가 증가되며,
관계형 데이터가 적절하게 처리하지 못했을 때, 유명해졌습니다.
What is a NoSQL database? - NoSQL 데이터베이스란?
"NoSQL" 이란 이름은 Strozzi NoSQL 을 만든 Carlo Strozzi 에 의해 도입되었습니다.
이 데이터베이스는 관계지향적이지만, 쿼리로 SQL 을 사용하지 않았습니다.
지금에 와서, NoSQL 은 많은 데이터베이스들에 대해 포괄적인 언어로 사용됩니다.
NoSQL 은 비관계이며, NoSQL은 Non-SQL 혹은 Not only SQL 의 약자입니다.
SQL 과 비슷한 데이터베이스들로부터 다른 주요한 차이점은,
NoSQL 데이터베이스들이 관계 테이블에 데이터를 저장하지 않는다는 겁니다.
Which kinds of NoSQL databases exist?
어떤 종류의 NoSQL 데이터베이스들이 존재하나?
NoSQL 이라는 이름은 매우 막연합니다.
이러한 이름은 이 데이터베이스가 작동하는 정확한 원리에 대해서 어떠한 것도 말해주지 않습니다.
하지만, 4 가지 가장 유명한 NoSQL 데이터베이스의 유형이 있습니다 :
key-value store : 키-값 저장
이러한 데이터베이스들은 키 로 값 을 매핑하며,
해시 테이블 을 구현합니다.
또한 이 데이터 구조는 dictionary(딕셔너리) 로 알려져 있기도 합니다.
이들은 주로 빠르게 접근할 필요가 있는 정보들을 저장하는 데 사용됩니다.
예를 들어, 캐시 가 있습니다.
Examples : Redis, DynamoDB
Wide-column stores : 와이드 컬럼 저장
이 데이터베이스들은 테이블을 사용하며, rows(줄) 을 관계형 데이터베이스처럼 사용합니다.
하지만 관계형 데이터베이스와의 차이점은,
와이드-컬럼 저장소의 컬럼(열) 의 형식과 이름이 줄마다 변경된다는 것입니다.
이 데이터베이스는 2 차원의 키-값 저장소처럼 취급되며,
주로 변하기 위한 객체를 저장하는 데 사용됩니다.
Examples : BigTable, Apache HBase
Document databases : 문서 데이터베이스
원래는 XML 형식으로 문서를 저장하기 위해 생성되었습니다.
하지만 현재에 와서, 이 데이터베이스는 JSON, YAML, BSON, 등등,
이러한 서로 다른 데이터 형식들과 작업 할 수 있습니다.
Examples : MongoDB, Apache CouchDB
Graph databases : 그래프 데이터베이스
이 데이터베이스는 노드 와 엣지(관계성) 과 함께 작동합니다.
이 디비는 가장 중요한 부분이 객체 간의 관계인 데이터를 표현하는 데 사용됩니다.
Graph(그래프) 데이터베이스들은 반구조화, 혹은 비구조화 데이터에서 패턴들을 식별하는 데 매우 유용합니다.
Example : InfiniteGraph, Neo4j
Why NoSQL database became popular?
NoSQL 데이터베이스는 왜 유명해졌을까?
시간과 함께 저장해야 할 데이터의 양이 과격하게 증가했습니다.
예를 들어, (2010 - 2020) 10년 동안의 조사에 따르면,
전 세계적으로 데이터의 양은 32배가 증가했습니다.
xychart-beta
title "연도별 데이터의 양 (zetabyte)"
x-axis ["2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"]
y-axis "제타바이트로 표현한 데이터의 양" 0 --> 200
bar [2, 5, 6.5, 9, 12.5, 15.5, 18, 26, 33, 41, 64.2, 79, 97, 120, 147, 181]
동일한 시간동안, 기기에 데이터를 저장하는 비용은 감소했습니다 :
xychart-beta
x-axis ["2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017"]
y-axis "저장되는 GB 당 소모되는 달러" 0 --> 0.12
line [0.11, 0.08, 0.06, 0.07, 0.05, 0.04, 0.03, 0.025, 0.02]
덜 구조화된 데이터의 양이 증가하면서,
관계형 데이터베이스에 이를 저장하기 위한 템플릿을 생성하는 것이 더 어려워졌습니다.
이로 인하여 NoSQL 데이터베이스들은 현대 개발 세상에서 더 유명해졌습니다.
BASE principles - BASE 원칙들
NoSQL 데이터베이스들은 데이터의 양이 지속적으로 증가하는 조건 속에서 유명해졌습니다.
이들은 간단한 수평적 확장성을 제공했습니다.
(시스템이 단지 새로운 기기를 추가함으로서 더 커다란 부하를 다룰 수 있게 하는것)
주로, NoSQL 데이터베이스들은 데이터베이스 인스턴스 간의 일관성을 보장하지 않습니다.
대신에 이들은 최종 일관성 을 제공합니다.
이는 결국, 데이터를 저장한 모든 기기의 인스턴스들이 동일하다는 의미입니다.
데이터베이스가 일관성 있어지는데 표현되는 시간은 주로 밀리초 이내입니다.
일반적으로, NoSQL 데이터베이스들은 BASE 원칙들을 따릅니다.
Base principles :
- Basically Available : 항상 가동
- Soft state : 부드러운 상태
- Eventual consistency : 최종 일관성
Basically Available 의미는, 데이터베이스가 항상 가동 가능하다는 의미입니다.
Soft state 의미는, 입력 데이터 없이도 시스템의 상태가 변할 수 있다는 겁니다.
예를 들어, 시스템 일관성을 만드는 것입니다.
When to use NoSQL databases? - NoSQL 을 사용할 때
NoSQL 데이터베이스는,
relational(관계형) 데이터베이스가 너무 복잡해졌을 때 생성되었습니다.
그리고 이는 여전히 NoSQL 데이터베이스를 사용하는 가장 큰 이유입니다.
만약 프로젝트가 반구조화,비구조화 데이터와 함께 작동해야 한다면,
NoSQL 이 좋은 선택이 될 겁니다.
게다가, NoSQL 데이터베이스는 다른 혜택들을 가질 수 있습니다.
예를 들어, 몇 가지 NoSQL 데이터베이스들은 거대한 데이터를 다루기 위해 설계되었으며,
이들은 모든 유형의 최적화를 가지고 있어서,
거대한 데이터를 작업하는데 더 효과적으로 만드는데 도와줍니다.
개발 시간은 주로 NoSQL 데이터베이스들이 더 짧습니다.
현대 세상에서는, 이를 고려하는 것이 중요합니다.
When not to use NoSQL DB? - NoSQL을 사용하면 안되는 때
일반적으로 NoSQL 데이터베이스들은, 일관성을 제공하지 않는데,
예를 들어 은행 트랜잭션을 다루는 어플리케이션의 경우, 이는 매우 중요합니다.
또다른 의심스러운 점은 바로 쿼리 언어 입니다.
만약 join 을 포함하는 복잡한 쿼리들이 필요하다면,
NoSQL 데이터베이스들은 좋은 선택이 아닙니다.
왜냐면 쿼리 인터페이스 가 꽤 제한적이기 때문입니다.
이는 변화되어, 쿼리 인터페이스가 더 정교해 졌습니다.
하지만 현재, 관계형 데이터베이스들이 여전히 훨씬 더 정교합니다.
NoSQL 데이터베이스들은 관계형 디비보다 더 애자일 적입니다.
그리고 이러한 점 때문에, NoSQL 디비가 매우 유명해졌습니다.
NoSQL 데이터베이스는 개발자가 비구조화 데이터를 쉽게 작업하게 해 주며,
최종 일관성을 제공합니다.
Conclusion - 결론
NoSQL 데이터베이스라고 이름지어진 서로 다른 데이터베이스의 넓은 영역이 존재합니다.
개발자가 그들의 프로젝트의 데이터베이스를 선택 할 때, NoSQL 은 그들의 고려에 반드시 들어가야 합니다.
특히, 비구조화 데이터를 작업 할 때는 더 고려해 봐야 합니다.
NoSQL 데이터베이스들은 일관적이지 않지만, 최종 일관성은 제공합니다.
이에 대한 더 자세한 내용을 보고 싶다면,
관계형 vs 비관계형 데이터베이스 블로그를 보세요.
words to remember
vague : 희미한, 막연한, 분명치 않은
versatile : 변하기 쉬운, 다재한, 다목적으로 쓰이는
drastically : 과감하게
thereby : 그것에 의하여, 그것에 관하여, 그 근처에
sophisticated : 정교한, 매우 복잡한
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
Arithmetic operations - bash에서 수학 연산 사용하기 (0) | 2024.08.10 |
---|---|
What is MongoDB - MongoDB 기초 및 설치 (0) | 2024.08.10 |
What is an HTTP server - HTTP 서버란? (1) | 2024.08.07 |
Working with file modes and permissions - 파일 모드와 권한 작업하기 (0) | 2024.08.05 |
File modes and permissions - 파일 모드와 권한 (0) | 2024.08.04 |