[SQL]CP2를 하다 NoSQL을 만나다

포동동·2022년 9월 20일
0
post-thumbnail

(이 포스팅은 개인 프로젝트 진행 중 정리할 필요가 있는 내용을 포스팅 한 것이다. 자세한 프로젝트 내용은 아래 링크를 참조해주길 바란다)
포스팅 보러가기

SQL과 NoSQL 중 왜 NoSQL?

  • SQL : 명확한 스키마가 있어 무결하나, join문이 복잡해질 가능성이 많고 수평적 확장이 어렵다.
  • NoSQL : 스키마가 없어 유연하고 읽고 쓰기가 빠르나, 데이터가 중복될 수 있어 업데이트가 어렵다.

나의 경우, 인스타와 카카오에서 API로 크롤링과 정보를 수집할 거라 굳이 정해진 스키마도 필요없고, 데이터 구조도 다 다를거라 (게다가 내용이 많아 속도도 중요함) NoSQL을 선택했다.


사진출처

사진출처


간단하게 각각의 자료형의 특징을 정리해보면,

  • 🔑 Key-value형
    • 단순한 구조이기에 속도가 빠르며 분산 저장 시 용이.
    • 관계형 데이터베이스에서 데이터 캐싱이나 이미지와 같은 대용량 객체 저장에 사용.
  • 📑 Document형
    • XML, JSON, BSON - 계층적 트리 데이터 방식으로 저장.
    • 집합적 데이터 모델 : 관계형 DB에서의 여러개 테이블 데이터를 하나의 Document에 모아둘 수 있음.
    • 조회시 한번의 조회로 필요한 데이터 획득. Join 기능을 대체.
    • 데이터를 여러 서버에 분산 저장이 가능하고, 복제와 회복이 가능한 형태이다. 장애가 발생하더라도 대응에 유리.
    • 대용량 데이터를 읽고 쓰는 웹 사이트용 백엔드 지원하는 경우나 다양한 유형의 메타데이터 추적을 하는 경우, JSON 데이터 구조를 사용하는 애플리케이션의 경우 사용.
  • 🗃 Wide-column형
    • 행마다 키와 해당값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있음.
    • 대량의 데이터의 압축, 분산처리, 집계 처리(sum, count, avg 등) 및 쿼리 동작 속도 그리고 확장성이 뛰어남.
  • 📊 Graph형
    • 데이터를 노드로 표현하며, 노드 사이의 관계를 엣지로 표현.
    • RDBMS 보다 Performance가 좋고 유연하며 유지보수에 용이한것이 특징.
    • Social networks, Network diagrams 등에 사용.


그래서 어떤 NoSQL?

내가 크롤링해 올 데이터들은 기본적으로 JSON으로 제공이되며, 업데이트가 많고, 빠른 속도가 중요하기 때문에 Key-value형과 Graph형은 필요하지 않을 것 같아 이번에는 Document형과 Wide-column형 중 선택하기로 했다. 아래와 같이 접해본 적 있는(그렇다고 써봤다고는 안 함) NoSQL Tool을 비교 분석하고 결정하기로 했다.

  • MongoDB
  • Elasticsearch
  • HBase
  • Bigtable

MongoDB와 Elasticsearch

둘 다 Document형 NoSQL로 빠른 속도가 특징이지만, 그 중에서도 Elasticsearch의 속도가 훨씬 빠르다(게다가 용량까지 적게 든다)는 블로그를 발견했다. 참고

각각의 내가 느낀 특징들을 정리해보자면,

  • MongoDB는 일단 발음이 귀엽다. 그리고 쉽다.
  • Elasticsearch는 REST API로 대화한다는 점이 정말 편했다. 그리고 역시 검색이 정말 편리하다!!

둘 다 각각의 장단점이 있어 고민이 되던 차, 이런 글을 보게 되었다.

"MongoDB에 어떤 데이터가 저장되면 ElasticSearch의 데이터로 동기화시켜 데이터를 구할때는 MongoDB가 아닌 Elastic Search에서 가져올 것이다." 참고

즉! MongoDB에 넣고 Elasticsearch에도 동기화 시켜서 검색할 때는 Elasticsearch에서 빠르게 뽑아온다!!
사람들 진짜 지니어스 하다 증맬. 각각의 좋은 점만 뽑아서 실행 할 수 있구나😎


HBase와 Bigtable

우선 Google이 발표한 Bigtable 논문에 기초해 만든 Apache의 HBase라 둘은 크게 다르지 않을 것이라고 생각했다. Wide-column형 NoSQL은 거의 대부분 Column-Family라는 것이 있다. 둘의 큰 차이점은 자체 관리형인 HBase에 비해, Bigtable은 클라우드 기반이라는 점 정도...?(성능은 Bigtable이 훨씬 빠르다). 하지만, 여기서 중요한 점.

MongoDB와 Elasticsearch가 연동되는 것과 비슷하게, HBase와 Bigtable도 연동된다! 참고



그래서 무엇을 선택할 것인가

정말 어렵다. 다 써보고 싶다. 솔직히. 하지만 무엇보다

  • Wide-column형 처럼 다양한 스키마가 필요없다. 항상 똑같은 JSON파일만 읽어올거니까.
  • 속도 is best
  • 빨리 배울 수 있어야 한다.
  • 가고 싶은 회사에서 MongoDB랑 Elasticsearch를 더 많이 쓴다.

라는 이유로 MongoDB와 Elasticsearch를 연동해서 써보기로 결정했다.
게다가 Elasticsearch는 Kibana까지 써볼 수 있으니 시각화도 도전해볼 수 있는 좋은 기회인 것 같다.

profile
완료주의

0개의 댓글