NoSQL은 No SQL이 아니라 Not Only SQL 이다.
관계형(relational) db를 사용/조작/관리 하기 위한 프로그래밍 언어이다.
여기서 언어는 Query 언어라서 자바 쪽 언어와 관련없는 언어이다.
standardized language used for managing relational databases
relational db를 사용하는 mysql oracle 등 대부분 SQL 언어를 사용한다.
relational db system 과 대화가 표준화 되어있다.
기억하자 sql은 관계형db가 아니라 관계형db에서 사용되는 언어이다!
스프링과 자바기반이 한몸이듯 sql은 관계형db와 한몸이라서 sql을 설명하면 관계형db를 설명하는것과 같다고 볼수있다.
장정 :
Data consistency: 일관성을 보장해준다. 관계형 db에서의 data는 contrainst기 많아서
연결고리(primary key, foreign key)를 잘 만들어서 관리해야 한다. 이런 보장은 개발자에게 안심과 확실성은 준다. 우리가 framework를 좋아하는 이유처럼 말이다.
SQL문은 모든 데이터가 잘 연결되도록 제약과 조건을 적용하여 정확하고 일관성 있게 유지시킵니다.
Scalability : 확장성. 대규모 데이터 처리에 간편하다/특수되있다.
Ease of use: 사용법. 생각보다 초보들도 사용가능하다. 다만 능숙하기 위해서는 어느정도 이해와 연습이 필요하다
Data security: 보안성. Authentication encryption등 고급 보안기능 제공.
Powerful querying: 쿼리의힘. 다양한 (필터 정렬 테이블결합)등의 퀴리 지원.
단점 :
Defined : 모든 테이블마다 확실한 정의가 필요하며 한번 정의한 테이블의 제약과 조건은 누구보다 까다롭다. 그만큼의 관계성 유지에 효율이 좋지만, 유연성이 0% 라서 많이 힘들다. 그만큼 딱딱한 친구다.
Evolution : 애초에 데이커가 커질수록 Schema디자인 굉장히 Complex해진다. 관 리는 물론 업그레이드에 있어서 매우 힘들다.
Scalability: 장점이자 단점이다. 어느 순간까지는 데이터 처리가 빠르고 편리하지만 많아지는 제약과 조건, 테이블로 인해 performance적으로 문제가 될수있다
장점 :
Scalability: 확장성. 수평적으로 (서버늘리기) 확장할 수 있도록 설계 되어있어서 대량의 데이터와 트래픽 처리하기에 이상적이다
Flexibility: 유연성: 강제적인 schema 요구가 없다. 다양한 데이터 유형과 구조를 처리할수있다.
Performance: 고성능으로 최적화 되어있다. 낮은 지연시간 빠른 엑세스와 처리
Productivity: 개발자들이 덜 고생함.
단점 :
Limited query: 제한적 쿼리 : SQL에 비하면 쿼리가 부족하다. 복잡한 쿼리가 필요할때 제 기능을 못할수도 있다.
최근 많이 발전중에 있다.
Transaction: ACID 특정 지원을 안한다. 이제 많이 발전해서 이제는 많은 NoSql 에서 제공을 해줍니다!
Data consistency: 데이터 일관성: 일관성 모델은 제공하지만 SQL보다 상대적으로 보장을 받진 않습니다. 일부 데이터 손실 또는 데이터 불일치가 발생할 수 있습니다.
SQL 과 NoSQL을 비교하는건 사실 이상한 이유라고 생각합니다.
애초에 목적이 다른 친구들을 비교할 수 있을까 싶다.
SQL은 고집이 쌔지만 꼼꼼하고 확실한 것을 좋아하는 친구고
NoSQL은 확장성과 고성능을 좋아하는 친구다.
둘다 장단점이 있으며 취향과 목적에 따라 사용된다.
개인적으로 NodeJs를 사용하는 초보개발자로서는 NoSQL인 MongoDB가 더 눈에 들어온다.
이유:
계속되는 발전: Transaction기능을 4.0부터 도입
전통적인 방법은 아니지만 SQL 흉내를 내려고 indexing querying data consistency를 포기하지 않은 부분
언어의 친밀도: JSON-based data model . nodejs 는 JSON(JavaScript Object Notation)을 베이스로 사용한다. 그리고 몽고DB는 BSON(Binary form of JSON)으로 데이터 처리를 한다. 그래서 서로 업무처리에 좋은 시너지를 만든다.
확장성: 확장성에 강한 Nodejs + 확장성에 강한 MONGOBD = 확장성2x 이지 아닐까 싶다.
성능: 몽고는 NoSQL의 장점인 속도,처리 부분에 강하다. Nodejs에게는 장점을 장점화시키는것과 같다.
Mysql도 가만히 있었던건 아니다.
Query Optimization(사실이게 sql이 겁나 무서운 이유다 절대 어라 sql왜 씀 할때는 이걸 명심하자), pararelle processing, consistency with modern hardware, JSON support, Spatial data, Security, Replication, in-memory database 등 꾸준히 발전해 왔다.
서로에 대한 장단점을 없애려고 서로가 발전해가는 모습인것 같다. 달랐던 목표가 ultimate 한 지점을 바라보고 있는게 느껴진다. 경계선이 조금씩 무너지며 우리에게는 취향과 목적등 선택에 있어서 더 다양해지니 아주 보기 좋은 모습이다
참고:내정보는 100%가 아니다. 안일한 방식으로 얻는 정보는 팩트가 아니므로 더 검색하고 시도해볼것이다. 스스로에게 관대하지말자