데이터베이스의 원칙
- 무결성
- 도덕성, 항상 정확해야하고, 데이터가 변경되거나 손상되면 안됨
- 안정성
- 확장성
- 데이터가 늘어났을 때 대비
- RDB에서 많이 활용
- 똑같은 서버를 늘리는 것 => NoSQL
- redis랑 mysql는 확장성이 안좋음
다양한 데이터베이스 종류
RDBMS : 관계형 DB
- 테이블이 들어가서 서로 관계를 사용해서 서비스 운영에 필요한 데이터들을 정의
- MariaDB => mysql발전된 버전
- column oreiented 될 수 없음
- 많이씀
- 중복 데이터 막는 것에 좋음
- 예를 들어, 사용자 정보 데이터에 해당
- column을 스키마라고 보면 됨
- json도 가능하긴함, 길이에 제한이 있음
- column 수정할때는 복사
NOSQL
- 쓰는것도 빠름
- 분산조회에 용이
- 예를 들면 블로그 포스팅 데이터
- 데이터 구조 변경, 데이터 수정에 용이
redis(key-value)
- key는 유니크
- 캐시용도
* 확장성은 많이 떨어짐
* 램 사이즈 크기밖에 못씀
* 많이씀
* 스케일 아웃하지 않음
dynamoDB(Key-value)
* partition key
* sort key
neo4j
* 그래프형 DB
mongoDB
- 컬렉션이 테이블, Documents가 로우
* Document 데이터베이스
* 자유로움
* jason형태로도 넣을 수 있음
* sacle out에 용이 => 클라우드 비용 절감
* 로그 남길 때 많이씀
* column oriendt이긴하지만, 다 때려박을 수 있음
* object id를 따로 넣어줌(pk랑 비슷)
* 인덱싱 따로 할 필요 없음
row oriented database
* 여러개의 row가 일열로 들어감
* read는 특정 컬럼 뽑을 때 시간 오래걸림
column oreiented
* read가 편함
* 빈자리에 있으면 넣음
* insert 느림
* 빅쿼리에 해당
* 특정 컬럼 데이터 가져올 때 용이
cap theorem
* 일관성
* 금융
* 가용성
* 이커머스
* partition- tolerance 분산 됬을 때도 괜찮다.
* 데이터 많을 떄
* 이 3개를 동시에 가질 수 없음
- 서비스에 적합한 데이터베이스 선택
- 넷플릭스: mysql, erd처럼 저장될꺼같음
- 인스타그램: 팔로우수가 떨어지는 오류, 가용성을 중요시여김
- 포스트 쓰면 포스트가 남아있어야함
- node하나에 일단 저장하고, 저장이 됬는지 안됬는지가 중요함
- 데이터복구가 쉬움