일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- yarn
- Scala
- Service
- airflow
- Example DAG
- python
- HDP
- MapReduce
- slack app
- HIVE
- HBase
- 람다 아키텍처
- hadoop
- Kafka
- Lambda architecture
- 빅데이터
- ambari
- LDAP
- re
- jupyter
- execution_date
- docker
- 정규표현식
- Windows
- HDFS
- SlackWebhookOperator
- slack
- Namenode
- NoSQL
- Today
- Total
IT 삽질기
NoSQL의 분류 본문
NoSQL의 분류
1. Key:Value DB
- Key:Value 쌍으로 저장되는 가장 단순한 형태로 Riak, Vodemort, Tokyo 등이 있음
2. Wide Columnar Store
- Big Table DB라고도 하며 Key:Value에서 발전된 형태의 Column Family 데이터 모델을 사용 HBase, Cassandra, ScllaDB등이 있음
3. Document DB
- JSON, XML과 같은 Collection 데이터 모델 구조를 채택하며 MongoDB, CoughDB가 해당
4. Graph DB
- Nodes, Relationship, Key-Value 데이터 모델을 사용하며 Neo4j, OreientDB등이 해당
그래프별 기능을 비교하면 아래의 표와 같다.
데이터 모델 | 성능 | 확장성 | 유연성 | 복잡성 | 기능 |
Key-Value | 높음 | 높음 | 높음 | 없음 | 가변적(없음) |
Column-Oridnted | 높음 | 높음 | 준수 | 낮음 | 최소 |
Document-Oriented | 높음 | 가변적(높음) | 높음 | 낮음 | 가변적(낮음) |
Graph | 가변적 | 가변적 | 높음 | 높음 | 그래프 이론 |
Relational | 가변적 | 가변적 | 낮음 | 준수 | 관계대수 |
DB별 비교
현재 많이 사용되고 있는 3개의 NoSQL DB에 대해 비교해보도록 하자
1. HBase
- 하둡 분산 파일 시스템(HDFS)에서 동작하는 Key-Value 구조 분산 DB로 Java로 개발
2. Cassandra
- masterless 아키텍처로 모든 노드가 coordinator 노드와 replica 노드가 될 수 있는 환경으로 Amazon의 Dynamo의 특징인 Hash 알고리즘을 이용
3. MongoDB
- 현재 가장 많이 사용하는 NoSQL로 10gen(현 MongoDB)이 개발한 document-oriented database로 JSON의 2진 버전인 BSON을 사용, C++로 개발
DB |
Cassandra |
HBase |
MongoDB |
설명 |
Facebook에 의해 2008년 발표 JAVA 기반의 분산 DB 컬럼형 NoSQL로 분류 |
대량 데이터를 우수한 성능으로 데이터 일관성을 보장하면서 다뤄야할때 주로 사용 수십 테라바이트가 넘는 빅데이터에 적합
|
높은 성능과 확장성 문서형 DB로 분류 input시 데이터 구조 정보를 포함하여 BSON형식으로 저장하고 Key-value로 사용 비정형 데이터, 파일 데이터등의 스키마프리(scheme free)모델에서 적합 SQL과 비슷한 방식의 쿼리 사용 |
장점 |
대량으로 쓰기가 발생하는 서비스에 좋음 확장성이 뛰어남 Apache에서 개발중이며 커뮤니티 활발 Scale-Out에 용이 대용량의 데이터 트랜잭션에 대해 고성능 처리가 가능 |
Hadoop 기반에서 동작하고 다양한 Hadoop 도구들과 상호 운영성이 좋음 상대적으로 데이터 일관성 보장 우수 |
스키마 없이 사용 가능 SQL과 비슷한 방식의 쿼리 사용 데이터 input시 메모리에 먼저 Write한 후 1분 단위로 Flushing하는 Write back 방식을 사용하여 write성능이 좋음
Read시에는 파일의 index를 메모리에 로딩해 놓은 후 찾음(memory mapped file) 빠름 다양한 기능 제공 |
단점 |
최소 3대 이상의 클러스터 환경 구성 권장 복잡한 조건 검색 불가 데이터 갱신 및 입력시 Atomic한 처리가 힘듬 |
5대 미만에서는 사용할 수 없음 성능이 그렇게 좋지 않음 |
JOIN이나 트랜잭션 처리 불가능 디스크에 쓰기가 비동식으로 이루어지기 때문에 경우에 따라 데이터가 유실될 가능성이 있음. |
RDBMS와 NoSQL
언제 RDBMS를 쓰고 언제 NoSQL을 사용해야 할까
- 데이터 읽기 쓰기 등 퍼포먼스에 집중한다면 NoSQL
- 트랜잭션과 같은 정합성 위주의 시스템을 사용한다면 RDBMS
- NoSQL은 컬럼이 언제든 변할 수 있으므로 데이터 컬럼이 늘어나거나 수정되어야 하는 경우가 발생할 수 있는 경우 NoSQL
- NoSQL의 경우 sorting, join, grouping, range query, index 부분에 매우 취약
- NoSQL의 가장 큰 장점은 확장성과 RDB보다 빠른 읽기/쓰기로 이 을 중요시 한다면 NoSQL을 선택
참고 자료
https://ko.wikipedia.org/wiki/NoSQL
https://brocess.tistory.com/115
https://www.oss.kr/info_techtip/show/b29a00bb-351e-4834-95c4-debf8589f706