분류 전체보기(81)
-
DBMS, 스키마, 3단계 데이터베이스 구조
DBMS의 개념과 특징 DBMS(DataBase Management System, DBMS)는 데이터베이스를 조작하는 별도의 소프트웨어이다. 데이터 무결성 부적절한 자료가 입력되어 동일한 내용에 대해 서로 다른 데이터가 저장되는 것을 허용하지 않는 성질 데이터 일관성 삽입, 삭제, 갱신, 생성 후에도 저장된 데이터가 모순이 없고 동일한 규칙내에 일정해야하는 성질 데이터 회복성 장애가 발생했을때 특정 상태로 복구되어야하는 성질 데이터 보안성 불법적인 노출과 변경으로부터 보호하는 성질 데이터 효율성 응답시간, 저장공간 활용들이 최적화되어야하는 성질 스키마의 개념과 3단계 데이터베이스 구조 스키마(Schema) 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것 3단계 데이터베이스 구조 3단계 데이터베..
2024.03.04 -
파일시스템과 데이터베이스의 차이점
파일시스템 과거에는 데이터를 관리하기 위해 파일시스템이라는 소프트웨어를 사용했다. 파일 시스템은 데이터를 파일로 관리할 수 있도록 파일을 생성, 삭제, 수정, 검색하는 기능을 제공하고 운영체제와 함께 설치된다. 파일 시스템은 응용프로그램별로 필요한 데이터를 별도의 파일로 관리한다. 이러한 특성은 아래와 같은 문제점을 가지고 있다. 데이터 중복 : 같은 내용의 데이터가 여러 파일에 중복 저장된다. 위 그림을 보면, 두 응용 프로그램에서 고객아이디, 고객명, 연락처, 주소 등의 데이터가 중복된다. 데이터가 중복되면, 저장공간이 낭비되고 데이터의 일관성과 무결성을 유지하기 어려워진다. 일관성 문제 : 예를 들어 고객관리 응용프로그램으로 고객 데이터 파일에 어떤 고객 연락처 정보를 수정했다. 그런데 주문 데이터..
2024.03.04 -
RDB와 NoSQL의 차이
RDB와 NoSQL의 차이 RDB 특징 기존의 테이블에 컬럼을 변경하고자 할 경우, 스키마를 변경해야줘야한다. 이미 기존에 대용량의 데이터가 저장된 경우에 스키마를 변경한다면, 상당히 위험 부담이 크다. → 유연한 확장성이 부족하다. 중복 제거를 위해 정규화를 진행함으로써, 데이터 중복을 최소화할 수 있지만, join을 함으로써 응답시간이 길어진다. → 복잡한 join은 Read성능을 하락시킨다. RDB는 기본적으로 한대의 컴퓨터에 저장한다. Read/Write요청이 매우 많아진다면, 기존 RDB를 저장한 서버는 부하가 많이 발생한다. 위 경우, scale up을 통해 DB 성능을 향상시킨다. (컴퓨터 자체를 성능 좋은 컴퓨터로 바꾼다는 의미임.) 혹은, 컴퓨터를 여러대 둔다.(scale-out) 그러나..
2024.02.23 -
타임라인 구현 방법 2가지 (pull mode, push model)
pull mode, push model 타임라인을 구현하는 방법에는 총2가지가 있다. 이때, 타임라인은, 인스타그램, 페이스북, 트위터와 같은 sns의 메인 피드를 의미한다. fanout : 사용자가 게시물을 작성하였을 때, 이 글을 봐야하는 모든 사람들(인스타그램의 팔로워, 페이스북 친구 등)에게 전달하는 과정 push model(fanout-on-write) : 쓰기 시점에 fanout하는 것을 의미한다. 즉, 사용자 1명이 게시글을 적을 때마다, 자신의 팔로워 모두에게 해당 글을 전파한다. pull model(fanout-on-read) : 읽기 시점에 fanout하는 것을 의미한다. 게시글을 적을 때는 별 동작이 없다가, 팔로워 1명이 새로고침하는 시점에 그 사람의 피드만 갱신한다. 따라서 on-..
2024.02.23 -
오프셋 기반 페이지네이션 vs 커서기반 페이지네이션
오프셋 기반 페이지네이션 - 페이징 (장단점) offset만큼 읽는데 이전의 읽었던 것을 다시 쭉 읽은 후 조회해서 데이터가 많아지면 성능상 안 좋다. 데이터 중복 문제: 2페이지 끝까지 읽었는데 앞에 최신 데이터가 들어오면 3페이지 읽을 때 중복이 발생할 수 있다. JPA에서는 Pageable을 이용해서 쉽게 구현할 수 있다. 커서기반 페이지네이션 - 무한스크롤 (장단점) offset을 사용하지 않고 Cursor를 기준으로 다음 n개의 데이터를 응답해주는 방식이다. 따라서 cursor가 unique한 값이어야한다. 데이터 중복이 발생하지 않고, offset과 다르게 이전의 데이터를 읽지 않고 바로 다음 cursor에 대한 정보를 주면 되므로, 대량의 데이터를 다룰 때 성능상 좋다 대신 where절에 여..
2024.02.22 -
clustered Index vs non-clustered Index (MYSQL기준)
clustered Index 특정 나열된 데이터들을 일정 기준으로 정렬해주는 인덱스이다. (ex: 영어사전) 그래서 클러스터형 인덱스 생성 시에는 데이터 페이지 전체가 다시 정렬된다. 하지만, 이러한 정렬 특징 때문에, 이미 대용량의 데이터가 입력된 상태라면 클러스터형 인덱스 생성은 심각한 시스템 부하를 줄 수 있다. 한개의 테이블에 한개씩만 만들 수 있다. (ex: pk) 본래 인덱스는 생성 시, 데이터들의 배열정보를 따로 저장하는 공간을 사용하나, 클러스터 인덱스는 따로 저장하는 정보 공간을 적게 사용하면서 테이블 공간 자체를 활용한다. 인덱스 자체의 리프 페이지가 곧 Data이기 때문에, 인덱스 자체에 데이터가 포함되어있다고 볼 수 있다. 보조 인덱스(non-clustered Index)보다 검색 ..
2024.02.21