전체 글(79)
-
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기준)
인덱스란?인덱스는 DB에서 데이터를 조회할 때 결과를 빠르게 추출하도록 도와주는 ‘데이터베이스 개체’이다. 마치 사전의 ‘찾아보기’와 같은 역할을 한다고 생각하면 된다.장점적절한 인덱스를 생성하고 조회하면 조회 성능을 획기적으로 개선할 수 있다.단점인덱스는 대략 테이블 크기의 10%공간이 추가로 필요 (인덱스 페이지 때문)SELECT가 아닌 데이터의 변경작업(INSERT, UPDATE, DELETE)이 자주 일어나면 성능에 악영향→ 페이지 분할 작업 때문인덱스 종류인덱스의 종류는 크게 클러스터형 인덱스와 보조 인덱스로 나뉜다.클러스터형 인덱스 (Clustered Index)테이블당 1개만 존재할 수 있다.기본키로 지정된 컬럼은 자동으로 클러스터링 인덱스가 생성된다.실제 저장된 데이터와 같은 무리의 페이지..
2024.02.21 -
페이지교체와 프레임할당
페이지교체와 프레임할당 물리 메모리보다 더 큰 프로세스를 실행할 수 있지만, 그럼에도 물리 메모리의 크기는 한정되어있다. 그렇기 때문에 운영체제는, 기존에 적재된 불필요한 페이지를 선별해 보조기억장치로 내보내고(=페이지 교체알고리즘), 프로세스들에게 적절한 수의 프레임을 할당(=프레임할당)해야한다. 요구페이징 요구되는 페이지만 적재하는 기법으로, 아래 순서대로 실행된다. cpu가 특정 페이지에 접근하는 명령어를 실행한다. 해당 페이지가 현재 메모리에 있을경우(=유효비트가 1일경우), cpu는 페이지가 적재된 프레임에 접근한다. 해당 페이지가 현재 메모리에 없을경우(=유효비트가 0일경우), page fault 인터럽트가 발생한다. page fault처리루틴은 해당 페이지를 메모리로 적재하고 유효비트를 1로..
2024.02.09 -
페이징을 통한 가상 메모리 관리
페이징을 통한 가상 메모리 관리 연속 메모리 할당의 두가지 문제점 외부 단편화의 문제 (=프로세스를 할당하기 어려운 만큼 작은 빈 공간들로 인해 메모리가 낭비되는 현상) 물리 메모리보다 더 큰 프로세스 실행이 불가능하다. 가상메모리 관리 실행하고자 하는 프로세스를 일부만 메모리에 적재하여, 실제 물리메모리보다 더 큰 프로세스를 실행시키는 기술을 의미한다. 가상메모리관리를 해결하기 위한 기술로 페이징, 세그멘테이션 등이 있다. 페이징 외부 단편화가 발생했던 근본적인 문제는 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문 페이징은 프로세스를 일정 크기로 자르고, 이를 메모리에 불연속적으로 할당한다. 즉, 페이징은 프로세스의 논리 주소공간(=cpu가 바라보는 주소공간)을 페이지라는 일정단위로 ..
2024.02.09