nosql rdbms를 찾아보면서 매우 다르게 설명되어 있는 글들을 볼수 있었다.
개발 속도
SQL과 NoSQL 데이터 베이스의 핵심 측면은 개발 속도에 있다. 근데 얼마나 유리한지는 잘모르겠다.
RDMBS의 경우 데이터를 입력하기전 스키마를 정의해야하고 이건 매우 오랜 시간이 걸린다. 또한, 열 추가 또는 열 변경과 같이 테이블의 각 변경에는 다른 데이터를 입력하기 전에 스키마를 변경하는 데 시간이 필요하다.
반면에, NoSQL의 경우 데이터 저장 및 검색을 시작하기 위해 스키마를 정의할 필요가 없다. 또한 비즈니스 요구로 스키마가 변경 되는 경우 스키마를 재구성하지 않고 데이터를 새 형식으로 저장할 수 있다.
NoSQL이 가지는 유연함으로 인해 데이터는 db에 들어가기전 구조화되지않고, 검증되지 않았기 때문에 형식이 잘못되었거나, 잘못된 데이터를 삽입하고 저장할 수 있다.
mongodb를 썼었는데 mongoose를 사용하는경우 스키마를 정의해서 어? 이러면 뭐가다른거지라고 생각 했던적이 있다. 근데 이건 개발 하는 단계에서 스키마를 정의해 좀더 사용이 편리하도록 해주는것이다. 웹서버의 스키마와 데이터가 일치 하지않아도 정상적으로는 작동한다. 단, db상 정보가 서버측 데이터 스키마에선 설정되어있지 않다면 undefined로 보여진다.
쓰기 속도
스키마가 없는 점은 NoSQL 데이터베이스에 쓰기(생성/업데이트) 속도라는 이점을 제공한다. sql 데이터베이스에는 삽입된 데이터가 테이블의 스키마와 일치하는지 확인하는 프로세스가 있는데 이 프로세스는 해당 열에 대해 각 데이터 항목의 유효성을 검사하므로 시간이 걸린다. 따라서 NoSQL 데이터베이스는 초당쓰기 작업수가 더많아 방대한 양의 로그 데이터를 저장해야하는 로깅 서비스에 유용하다.
읽기 속도
반면에 SQL 데이터베이스는 데이터베이스에서 대량의 데이터를 효율적으로 읽는데 탁월하다. 초당 여러 읽기 작업을 수행하는 시나리오 에선 기존 SQL이 좋다.
SQL데이터베이가 데이터를 효율적으로 읽기 위해 사용하는 기술 중 하나는 기본적으로 테이블에 있는 기존 데이터의 복제인 인덱스 이다. 데이터는 RAM에 효율적으로 복제되고 저장된다. 따라서 RAM이 기존 스토리지인 HDD/SSD 보다 빠르게 작동하므로 빠르게 가져올 수 있다. 그러나 DB의 모든 데이터를 인덱싱 할수는 없다, 물론 하고싶지 않을 수도 있다. 이것은 본질적으로 메모리의 모든 데이터베이스 정보를 복제하는 것이다. 메모리는 무한하지 않기 때문에 데이터베이스가 실행되는 시스템이 응답하지 않을 수 있다.
인덱스를 추가하면 DB 쓰기 시간이 늘어난다. 이는 실제로 데이터를 디스크에 쓰기 전에 필요할때 이 새 데이터를 빠르게 읽을 수 있도록 인덱스를 업데이트 해야한다.
일부 NoSQL 데이터베이스에도 인덱스가 있는것은 맞다. 그러나, NoSQL DB 본질적으로 비구조적이기 때문에 정의에 따른 인덱싱의 효율이 떨어진다. 데이터를 인덱싱할 때 동일한 열의 데이터처럼 서로 관련 있는 데이터를 원한다. 그렇지 않으면 효율적으로 저장할 수 없으며 쿼리 시간은 인덱스가 없는 경우가 거의 동일하다. 예) A열 인덱싱 => 열B에서 데이터를 검색하는 경우 인덱스는 도움 x
출처: