본문 바로가기
computer_science

복습2

by useSword 2024. 3. 30.

----1----
지수 백오프 
지수 백오프는 네트워크 상에서 일시적인 오류가 발생했을 때, 재시도 간격을 늘려가며 재시도를 수행하는 알고리즘
보통 최초 재시도는 비교적 빠른 간격으로 수행하고, 만약 재시도가 여전히 실패하면 재시도 간격을 지수적으로 증가시켜 더 큰 간격으로 재시도를 수행하게 한다.

모든 클라이언트가 동시에 재시도를 한다면, 서버는 한꺼번에 많은 요청을 처리해야 하므로 부하가 증가할 수 있다. 
이러한 현상을 '재시도 폭주'라고 하며, 이를 방지하기 위해 지수 백오프가 필요

<사용 이유>
재시도의 재시도가 실패하면 어떻게 해야 할까?", "재시도와 재시도 간격은 얼마나 해야할까?", "재시도가 계속 실패한다면 어떻게 해야 할까?" 


----2----
이진 트리
자식 노드가 최대 두 개인 노드들로 구성된 트리
는 계층적 데이터 구조를 표현하는 데 주로 사용함.
조직도, 파일 시스템의 구조 등이 이에 해당

이진 탐색 트리
이진 탐색(binary search) + 연결 리스트(linked list)를 결합한 이진트리 + 정렬되어있음.
데이터를 정렬된 상태로 유지하면서, 효율적인 탐색, 삽입, 삭제 작업을 가능하게함
이진 탐색의 효율적인 탐색 능력을 유지하면서 빈번한 자료 입력과 삭제를 가능하게끔 고안됨.


----3----
인덱스는 특정 테이블의 하나 이상의 열(column)에 대한 데이터의 주소를 포함하는 데이터 구조.(새로 테이블 만드는 거지 머)

효율적인 데이터 검색: 인덱스를 사용하지 않은 데이터 검색은 전체 데이터를 처음부터 끝까지 순회해야 하는 반면, 인덱스를 활용하면 훨씬 더 빠른 검색이 가능
데이터 정렬 및 빠른 액세스: 인덱스는 데이터를 정렬된 상태로 유지하여, 범위 검색과 정렬된 데이터의 빠른 접근을 용이하게함
데이터 무결성 보장: 일부 인덱스는 테이블의 유니크(Unique) 제약 조건을 유지하는 데 사용됨.
예를 들어, 주민등록번호와 같은 열에 유니크 인덱스를 설정하면, 중복된 데이터의 입력을 방지 가능

기술적으로는 모든 컬럼에 인덱스를 설정할 수 있습니다. 
실제로 모든 컬럼에 인덱스를 설정하는 것은 매우 비효율적임
성능 저하 : 데이터가 변경될 때마다 인덱스도 함께 업데이트되어야 하기 때문임.  빈번하게 갱신되는 컬럼에 인덱스를 설정하는 것은 성능상의 문제를 초래함
저장 공간 증가 : 인덱스는 추가적인 디스크 공간을 사용함. 모든 컬럼에 인덱스를 생성하면, 데이터베이스의 저장 공간 요구량이 급격히 증가
수정할떄 전부다 수정해야하기 떄문에 문제점이 생김

검색 효율성

----4----
SQL
관계형 데이터베이스 관리 시스템(RDBMS)을 사용하여 엄격한 테이블 기반의 구조로 데이터를 저장함
정형화된 스키마를 따라야함
SQL 데이터베이스는 주로 수직적 확장성을 지원합니다. 이는 데이터베이스 서버의 성능을 향상시키기 위해 더 강력한 하드웨어를 추가하는 것을 의미
SQL 데이터베이스는 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 강력하게 지원함. 대규모 데이터 셋과 트래픽을 처리하는 데 유리
SQL 데이터베이스는 SQL 쿼리 언어를 사용하여 데이터를 쿼리하고 조작


NoSQL
스키마가 없거나 유연한 데이터 모델을 사용하여, 키-값 쌍(Key-Value), 문서(Document), 그래프(Graph), 열 기반(Columnar) 등 다양한 형태로 데이터를 저장할 수 있음
NoSQL 데이터베이스는 수평적 확장성을 지원하여, 더 많은 서버를 데이터베이스 시스템에 추가함으로써 데이터베이스의 용량을 증가
NoSQL 데이터베이스는 일반적으로 BASE(Basically Available, Soft state, Eventually consistent) 모델을 따릅니다. 이는 가용성과 분산 처리에 초점을 맞추며, 일관성은 최종적으로 달성


SQL을 사용해야하는 이유
데이터에 정교한 쿼리가 필요한 경우,엄격한 데이터 무결성 요구 사례,관계형 데이터 모델링이 필요한 경우



NoSQL 데이터베이스를 사용해야하는 이유
대규모 데이터셋 및 빅 데이터,유연한 스키마가 필요한 경우,기와 쓰기 작업의 높은 처리량이 요구되는 경우


----5----
병합 정렬 (Merge Sort)
반복적인 부분 즉 재귀를 활용하는 상태를 찾아내는 것을 개인적으로 선호함.

----6----
해시 테이블(주소값을 잊지마)
도서 ID를 키값으로 사용함.그리고 특정한 값을 넣어 추후에 도난 방지에도 도움될 것 같음
도서 ID로 빠르게 도서 정보를 검색할 수 있음
해시 테이블은 키를 사용하여 값을 빠르게 검색할 수 있기 때문에 도서의 신속한 검색과 삽입, 삭제 작업에서 높은 효율성이 보일 듯함.


----7----
퀵 정렬 : O(n log n). 최악의 경우가 있으면 느려지지만 그건 충분히 극복가능함. 

정렬되어 있을 경우.
병합 정렬 (Merge Sort): O(n log n) 
힙 정렬 : O(n log n) : 최악, 최선의 경우에도 모두 O(n log n)의 일정한 시간 복잡도를 보임

----8----
논리적 설계 (Logical Design)(데이터 모델링)
논리적 설계는 데이터 모델링의 과정을 통해 데이터와 데이터 간의 관계를 정의하는 단계

- 개념 세계의 데이터를 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계로 표현되는 논리적 구조의 데이터를 모델화함
- 개념 스키마를 평가 및 정제하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계
- 트랜잭션의 인터페이스 설계
- 관계형 데이터베이스라면 테이블을 설계


물리적 설계 (Physical Design)(데이터 구조화)
물리적 설계 단계에서는 논리적 설계를 바탕으로 실제 데이터베이스 관리 시스템(DBMS)에서 구현될 물리적 구조를 설계

- 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사


----9----
SQL에서 JOIN은 두 개 이상의 테이블에서 관련된 데이터를 결합하는 작업

INNER JOIN
정의: 두 테이블 간에 일치하는 데이터가 있는 경우에만 결과를 반환

LEFT JOIN
정의: 왼쪽 테이블의 모든 레코드와 오른쪽 테이블에서 매칭되는 레코드를 반환

RIGHT JOIN 
정의: LEFT JOIN의 반대 개념입니다. 오른쪽 테이블의 모든 레코드와 왼쪽 테이블에서 매칭되는 레코드를 반환

FULL OUTER JOIN
정의: 두 테이블의 모든 레코드를 반환함.

SELF JOIN
정의: 테이블이 자기 자신과 조인되는 경우입니다. 별칭(alias)을 사용하여 같은 테이블을 참조하되 마치 두 개의 서로 다른 테이블인 것처럼 처리함

CROSS JOIN
한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능.
상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼 됨
카티션 곱(CARTESIAN PRODUCT)라고도함


'computer_science' 카테고리의 다른 글

복습  (0) 2024.03.28
네트워크 (OSI7계층, TCP/IP)  (1) 2024.03.26
computer science 2일차 (프로세스)  (0) 2024.03.20
computer science 1일차 (CPU,메모리)  (0) 2024.03.19