Computer Science/Database

    Join 알고리즘

    조인 알고리즘 다수의 테이블에서 조인을 수행할 때는 동시에 여러 개의 테이블에 접근할 수 없기 때문에, 내부적으로 접근할 순번을 정해서 차례로 테이블에 접근한 결과를 다음 순번의 테이블로 전달한다. 이때 테이블에 접근하는 선후 관계에 따라 드라이빙 테이블과 드리븐 테이블로 구분한다. 드라이빙 테이블에서 많은 건수가 반환되면 해당 결과를 가지고 드리븐 테이블에 접근하게 되므로, 가능하면 적은 결과가 반환될 것으로 예상되는 드라이빙 테이블을 선정하고, 조인 조건절의 열이 인덱스로 설정되도록 구성해야 한다. 중첩 루프 조인 (NL 조인) 드라이빙 테이블의 데이터 1건당 드리븐 테이블을 반복해 검색하며 최종적으로는 양쪽 테이블에 공통된 데이터를 출력한다. 인덱스는 인덱스로 정의된 열 기준으로 순차 정렬되지만, ..

    NoSQL과 종류

    RDB vs NoSQL RDB 관계형 데이터베이스는 엄격한 스키마를 요구하는 테이블 기반 데이터 구조를 갖습니다. [장점] 데이터의 형태와 크기를 미리 정하고 테이블 단위로 구분하여 데이터를 저장할 수 있다. 트랜잭션을 통해 ACID를 보증하여 안정적인 데이터 관리가 가능하다. 조인을 포함해 복잡한 조건을 포함하는 데이터 검색이 가능하다. 엄격한 스키마로 인해 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리하다. [문제점] 웹이 기하급수적으로 성작하면서, SNS를 통해 작성되는 자유로운 형태의 텍스트와 로그 기록 같은 다양한 유형의 비정형 데이터가 빠른 속도로 대량 생산되고 있습니다. 관계형 데이터베이스는 이러한 대량의 비정형 데이터를 저장하고 처리하기에 맞지 않습니다. 또한 여러 컴퓨터가..

    트랜잭션과 ACID

    트랜잭션 트랜잭션은 데이터베이스 내에서 수행되는 작업의 최소 단위로, 데이터베이스의 무결성을 유지하면서 데이터베이스의 상태를 변화시키는 기능을 수행합니다. 필요성 1. 트랜잭션은 데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위가 됩니다. 2. 트랜잭션은 다수의 사용자가 동시에 사용할 수 있도록 제어 작업을 하는 데 중요한 단위로 사용됩니다. 따라서 데이터베이스 무결성과 일관성을 보장하려면 작업을 수행하는데 필요한 연산들을 하나의 트랜잭션으로 정확하게 정의하고 관리하는 것이 중요합니다. 일반적으로 데이터베이스를 변경하는 INSERT 문, DELETE 문, UPDATE 문의 실행을 트랜잭션으로 관리! ACID 트랜잭션이 성공적으로 처리되어 데이터베이스의 무결성과 일관성을 보장하기 위해 만족해..

    `이상현상과 정규화

    이상현상 (Anomaly) 한 릴레이션에 여러 엔티티의 속성들을 혼합하게 되면 불필요한 데이터 중복이 발생하여, 릴레이션에 대한 데이터의 삽입, 수정, 삭제 연산을 수행할 때 부작용이 발생할 수 있다. 이러한 부작용을 이상 현상이라고 하며, 함수 종속성을 이용하여 릴레이션을 연관성 있는 속성들로만 구성되도록 분해해서 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어나가는 과정을 정규화라고 한다. 이상현상 설명 삽입 이상 데이터 삽입 시 필요한 자료가 부족해 삽입되지 않거나, 불필요한 자료를 삽입해야 하는 문제 갱신 이상 중복 튜플 중 일부만 변경되어 데이터가 불일치하게 되는 모순 삭제 이상 삭제하려는 자료가 포함된 전체 튜플이 삭제되면서 원하지 않는 데이터까지 삭제되는 정보 손실 함수 종속 하나의 릴..

    JOIN의 종류

    JOIN 조인이란 두 개 이상의 테이블을 서로 연결하여 하나의 결과를 만드는 것을 말합니다. 즉, 필요한 데이터가 여러 테이블에 흩어져 존재하는 경우에 조인을 이용해 데이터들을 결합할 수 있습니다. 조인은 분리된 데이터 간의 공통된 정보, 즉 동일한 칼럼 또는 키 기준으로 데이터를 논리적으로 연결합니다. Inner Join 두 테이블에 공통된 데이터가 존재하는 행에 대해서만 조인을 수행하는 방법으로, 교집합에 해당합니다. [명시적 방법] JOIN 키워드에 조인 대상 테이블을 작성하고 ON 절에는 조인할 비교조건 작성 SELECT 학생.학번, 학생.이름, 지도교수.교수명 FROM 학생 JOIN 지도교수 ON 학생.학번 = 지도교수.학번 [암시적 방법] SELECT 학생.학번, 학생.이름, 지도교수.교수명 ..

    `서브쿼리와 뷰

    서브쿼리 서브쿼리란 쿼리 안의 보조 쿼리를 가리키는 용어로, 가장 바깥쪽의 SELECT 문인 메인쿼리를 기준으로 내부에 SELECT 문을 추가로 작성한다. 서브쿼리는 SELECT 문 안쪽에 위치한 SELECT 문이 어느 위치에 작성되었는지에 따라 아래와 같이 구분할 수 있다. 위치 이름 SELECT 절 스칼라 서브쿼리 FROM 절 인라인 뷰 WHERE 절 중첩 서브쿼리 스칼라 서브쿼리 메인쿼리의 SELECT 절에 있는 또 다른 SELECT 절 스칼라 서브쿼리의 결과값은 1행 1열의 구조로 출력되어야 하며, 만약 스칼라 서브쿼리의 결과값이 2개 이상 나오면 에러가 발생한다. 보통 스칼라 서브쿼리는 출력되는 데이터 건수가 1건이어야 하므로 집계함수(max, min, avg, sum, count 등)와 같이 ..

    테이블과 키

    테이블 테이블은 데이터를 저장하는 오브젝트로 행과 열의 정보를 저장하며, 관계형 데이터베이스는 2차원 배열 형태로 테이블을 관리합니다. Row 로우는 행에 해당하는 용어로, 테이블에서 동일한 구조의 데이터 항목들의 집합을 가리킵니다. 즉, 행은 하나의 데이터 항목 집합이며 모든 행의 집합은 테이블! 로우 수가 많아지면 데이터에 접근하는 과정에서 시간이 오래 소요될 가능성이 높기 때문에, 파티셔닝 기법으로 SQL 문의 성능 향상을 고려해볼 수도 있습니다. Column 컬럼은 열에 해당하는 용어로, 사전에 정의한 데이터 유형으로 데이터값을 저장합니다. 키 Super Key 각 row를 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합을 말합니다. 유일성 만족 유일성: 하나의 키 값으로 특정 row..

    `DB 엔진과 SQL 수행 프로세스

    SQL 수행 전체 프로세스 사용자가 DB에서 원하는 데이터를 가져오기 위해 SQL 문을 실행한다. 실행된 SQL 문은 MySQL 엔진에서 문법 에러가 있는지, DB에 존재하는 테이블 대상으로 SQL 문을 작성했는지와 같은 세부사항을 다양한 문법 및 구문으로 검사한다. (파서) 사용자가 요청한 데이터를 빠르고 효율적으로 찾아가는 전략적 계획을 수립한다. (옵티마이저) 수립한 계획을 토대로 스토리지 엔진에 위치한 데이터까지 찾아간 뒤 해당 데이터를 MySQL 엔진으로 전달한다. MySQL 엔진은 전달된 데이터에서 불필요한 부분을 필터링하고 필요한 연산을 수행한 뒤 사용자에게 최종 결과를 전달한다. DB 엔진 스토리지 엔진 스토리지 엔진은 사용자가 요청한 SQL 문을 토대로 DB에 저장된 디스크나 메모리에서 ..

    `MySQL과 MariaDB

    MySQL MySQL은 1995년 오픈소스로 배포된 관계형 데이터베이스 관리 시스템으로, 대용량 데이터와 가용성, 안정성을 제공한다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로, 2010년 오라클에 인수되었다. 현재 MySQL8.0 버전까지 배포되었으며 상용 버전과 커뮤니티 버전으로 구분한다. 상용 버전은 오라클에서 다양한 보안 패치와 개선된 기능을 제공하지만, GPL 라이선스를 사용하는 무료 버전은 제약된 기능과 서비스만 사용할 수 있다. MariaDB MySQL이 오라클로 인수되고 나서 개발 지침과 라이선스 정책의 변화에 따라, MySQL의 핵심 개발자 주도로 오픈소스 정책을 지향하는 MariaDB가 탄생했다. MariaDB는 MySQL 소스코드를 기반으로 개발되..