오늘은 데이터베이스에 관련된 지식을 강의를 통해 공부하고, 데이터베이스를 생성하고 수정하고 삭제하는 등의 작업을 진행해볼 것이다.
DataBase(DB)
DB
- 데이터를 통합하여 관리하는 데이터의 총집합
- DB안에 여러 개의 테이블로 구성되고, 테이블 안에 여러 특성들이 담겨있는 데이터가 적재되어있다.
DBMS
- DataBase Management System의 약자로, 말그대로 DB를 관리하는 미들웨어 프로그램을 의미한다. ex) MySQL, MongoDB, etc.
RDBMS
-
Relational DBMS, 관계형 데이터베이스로 다른 두 개의 데이터를 특정한 키값으로 합칠 수 있다. ex) Oracle, MySQL, etc.
-
데이터 사이의 관계를 설정을 잘해서 최적화된 스키마를 설계할 수 있다.
-
Table
- 행과 열로 이루어져 있는 데이터베이스를 다룬다.
- Storage Engine
- MyISAM: select가 빠름, table 단위 lock → 누군가 table을 점유하고 있으면 다른 사람은 사용할 수 없다. ⇒ 데이터를 추출할 때 유리!
- InnoDB: select가 느림, row 단위 lock → 특정 row를 select하면 해당 row를 못쓰지만 table은 사용할 수 있다. ⇒ 여러 사람이 접속하여 데이터를 적재할 때 유리!
-
Schema
- 스키마는 데이터베이스의 구조를 만드는 디자인을 말한다.
- Why? RDBMS는 키값으로 관계를 가지기 때문에 면밀하게 구조화해야 하기 때문!
NoSQL
- Mongodb, Hbase, Cassandra
- 데이터 사이에 관계 없이 저장하는 데이터베이스이며, python의 dictionary형태와 유사하다. (key:value)
- 💡그럼 왜 쓰냐 → 관계가 없어서 복잡성이 좋고 많은 데이터를 저장할 수 있다는 장점! 예를 들어 키값을 가지고 있으면 데이터 하나를 수정해야 할 때 일부가 아닌 대부분을 손대야 할 가능성이 높은데, 이것은 파이썬의 딕셔너리처럼 데이터를 수정, 추가, 삭제 등의 작업이 원활하게 실행할 수 있다.
- 왜 인기가 있냐? 빅데이터가 활성화되면서 인기가 많아짐
- 데이터의 분산처리가 용이하고, 구조 변경이 필요없다.
- 스키마 및 Join이 없다.
- 저장되는 포맷은 Key-Value 형태의 JSON 포맷을 사용
- select는 느린데 Insert가 빠르다.
- 💡로그 데이터 수집할 때 방대한 데이터를 빠르게 적재해야 하는데 insert가 빨리 실행되는 NoSQL을 주로 사용!
SUMMARY
💡 자 정리하자면, 나는 AWS를 통해 ubuntu 가상 서버를 구축하였다. 포트는 22, 3306, 8888로 설정하였으며, 해당 서버에 Jupyter notebook, pyenv, MySQL을 설치하였다. 외부에서 내가 MySQL Workbench 아이콘을 눌러 접속하게 된다면 외부에서 해당 서버로 password를 통해 접속하는 것이다. 데이터베이스는 Cyberduck을 통해 우분투 서버에 넣어줬다. 그렇다면 새로운 데이터베이스를 추가하고 싶을 때는 서버에 DB를 먼저 넣어줘야 한다.
경로: Server - Database - table
궁금한 점: 사실 pandas로도 충분히 데이터를 merge, concat 등을 통해 병합, 수정, 적재, 삭제 등이 진행 가능하다. 근데 왜 많은 기업들은 SQL을 통해 데이터 추출 및 가공할까?
💡 pandas는 데이터베이스를 RAM에 저장하여 사용한다. RAM은 대부분 8GB, 16GB이다. 근데, MySQL의 경우 ROM 하드웨어에 저장하는데 만약 1TB 사용 가능한 서버라면은 막대한 용량 범위를 가질 수 있다. (나의 경우 8GB 서버라 그닥 연습용으로만!) 물론 SQL이 빠르고 성능이 좋다. 그래서 기업들이 SQL을 사용하고 인재 역시 SQL 쿼리문을 능숙하게 다룰 수 있는 사람을 찾는 것이었다!!
*참고: 만약 데이터 크기가 100TB여서 1TB짜리 컴퓨터 100대를 사용할 정도다. 이러한 빅데이터를 다루기 위해서 Spark와 같은 프로그램을 사용하는 것!