Skip to content

태그: 데이터베이스

MongoDB Aggregation
mongodb
MongoDB의 Aggregation은 각 스테이지가 순차적으로 처리되며, 그 결과를 다음 스테이지로 전달하면서 사용자의 요청을 처리한다. 그래서 각 스테이지들의 배열 순서는 처리 성능에 많은 영향을 미친다. 예를 들어, 필요한 도큐먼트만 필터링 하는 스테이지는 데이터를 그룹핑하는 스테이지보다 앞쪽에 위치해야 그룹핑해야 할 도큐먼트의 건수를 줄일 수 있고, Aggregation의 성능을 높일 수 있다. aggregation 파이프라인의 각 단계에서는 다음과 같은 연산자들을 제공한다. $project: 출력 도큐먼트상에 배치할 필드를 지정한다. $match: 처리될 도큐먼트를 선택하는 것. find()와 비슷한 역할을 수행한다. $limit: 다음 단계에 전달될 도큐먼트의 수를 제한한다. $skip: 지정된
Atlas Search
mongodb
MongoDB의 Atlas Search는 Atlas 클러스터에서 데이터의 세밀한 텍스트 인덱싱과 쿼리를 가능하게 한다. Atlas Search는 데이터베이스에 별도의 검색 시스템을 추가하지 않고도 고급 검색 기능을 사용할 수 있도록 한다. Atlas Search는 여러 종류의 텍스트 분석기 옵션, $search와 $searchMeta 같은 Atlas Search 집계 파이프라인 단계를 다른 MongoDB 집계 파이프라인 단계와 함께 사용하는 풍부한 쿼리 언어, 그리고 점수 기반 결과 순위 지정을 제공한다. 개념 인덱싱 검색에서 인덱스는 쉽게 검색할 수 있는 형식으로 데이터를 분류하는 데이터 구조다. 검색 인덱스는 전체 컬렉션을 스캔하지 않고도 주어진 용어를 포함하는 문서를 더 빠르게 검색할 수 있게 한다.
Column, Row기반 DB
데이터베이스
Row(행) 기반방식은 전통적인 데이터베이스에서 사용하는 레코드 단위 기반의 저장방식이다. 반면 Column(열) 기반방식은 대용량 데이터를 처리하는 데이터베이스에서 사용하는 열 단위 기반의 저장 방식이다. 그러면 이 두 가지 방식이 어떤 차이점이 있는지 자세히 살펴보자. ​아래와 같은 데이터가 들어있는 테이블이 있다고 가정했을 때에 전통적인 방식의 Row 기반방식은 각각의 행이 고유한 ID 값을 가지고 있게 된다. 데이터베이스가 특정 쿼리에 의해서 데이터를 조회하면 레코드 별로 부여되어 있는 고유한 ID를 찾고 그 레코드의 하나의 행에 종속되어 있는 모든 열의 데이터를 모두 불러온다. 그러면 정작 실제로는 필요하지 않은 열까지도 모두 읽게 되는 비효율적인 동작이 발생하는 것이다.
DBMS와 RDBMS
db설계
💾 DBMS(Database Management System) 넓은 의미에서의 데이터베이스는 일상적인 정보들을 모아 놓은 것 자체를 의미한다. 일반적으로 DB라고 말할 떄는 특정 기업이나 조직 또는 개인이 필요한 데이터를 일정한 형태로 저장해 놓은 것을 의미한다. 사용자들은 보다 효율적인 데이터 관리뿐만 아니라 예기치 못한 사건으로 인한 데이터의 손상을 피하고, 필요할 때 데이터를 복구하기 위한 강력한 기능의 소프트웨어를 필요로 한다. 이러한 요구사항을 만족시켜주는 시스템을 데이터베이스 관리 시스템(DBMS)이라고 한다. 💾 RDBMS(Relational Database Management System) 관계형 데이터베이스는 정규화 이론에 근거한 합리적인 데이터 모델링을 통해 데이터 이상(Ano
데이터모델링
db설계
모델링이란 복잡한 현실세계를 추상화, 단순화, 명확화하기 위해 일정한 표기법으로 모델을 표현하는 기법이다. 마찬가지로 데이터 모델링은 비즈니스를 IT 시스템으로 구축하기 위해 데이터 관점으로 업무를 분석하는 기법으로써, 약속된 표기법으로 데이터의 구조를 표현하는 과정이다. 즉 IT 시스템의 근간이 되는 데이터베이스를 구축하기 위한 분석 및 설계의 과정이라고 할 수 있다. 데이터 모델이 중요한 이유 이유설명파급효과(Leverage)데이터 설계 과정에서 비효율적인 데이터 설계 및 업무 요건을 충족하지 못하는 데이터 설계를 한다면 개발/테스트/오픈/운영의 전 과정에 걸쳐서 엄청난 비용이 발생할 수 있다.복잡한 정보 요구사항의 간결한 표현(Conciseness)좋은 데이터 모델
무결성 제약조건
db설계
무결성이란? 테이블에 중복된 데이터가 존재하거나, 부모와 자식 데이터 간의 논리적 관계가 깨지면 프로그램에 큰 장애가 발생할 수 있다. 데이터 무결성은 이러한 일이 일어나지 않도록 데이터의 정확성, 일관성, 유효성을 유지되는 것을 의미하며, DBMS에서 꼭 신경써야 할 사항이다. 그렇기 때문에 DBMS는 무결성을 지키기 위해 제약조건이라는 기능을 기본적으로 제공한다. 무결성 제약조건의 종류 1. 개체 무결성(Entity integrity) : 기본키는 null 값이 될 수 없음 각 튜플에 접근하기 위해 정의된 기본키가 null값이 되면 튜플의 유일성을 판단할 수 없기 때문에 기본키는 null이 되면 안된다. 2. 참조 무결성(Referential integrity) : 외래키는 참조할 수 있는 값을 가져야함
분산데이터베이스
db설계
분산 데이터베이스는 여러 곳으로 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스이다. 논리적으로는 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산하여 저장되어있는 데이터들의 모임을 지칭한다. 투명성 분산 데이터베이스의 투명성(Transparency)은 해당 데이터베이스를 사용하는 사용자가 데이터베이스 시스템이 분산되어있는 것을 인식하지 못하고 자신만의 데이터베이스 시스템을 사용하는 것으로 인식하도록 만드는 것이다. 네트워크로 치면 다중 서버환경을 떠올리면 된다. 분산 데이터베이스의 투명성은 여러가지 의미를 지닐 수 있다. 외울 필요는 없고, 분산 데이터베이스의 투명성이 어떤 측면에서, 어떻게 지켜져야하는지에 대한 대략적인 그림을 그릴 수 있으면 충분하다
스키마
db설계
스키마는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다. 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다. 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다. 외부 스키마(External Schema) 외부스키마는 사용자나 응용프로그래머 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다. 외부스키마는 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마(Sub Schema)라고도 한다. 하나의 데이터베이스 시스템에는 여러개의 외부 스키마가 존재할 수 있으며
정규화와 반정규화
db설계
💾 정규화(Normalization)란? 정규화는 데이터의 일관성을 지키고 중복을 최소화하기 위하여 데이터를 분해하는 과정이다. 데이터베이스 변경시의 이상현상을 제거하고, 구조를 확장하기 쉽도록 하는 것이 목표이다. 정규형 정규형설명제1정규형속성이 원자성을 가진다. 한 속성이 여러 개의 속성값을 갖거나 같은 유형의 속성이 여러 개 인 경우 해당 속성을 분리한다.제2정규형복합 후보키가 있을때, 후보키에 속하지 않는 속성을 결정하기 위해서 후보키의 전체를 참조해야한다. 부분 함수 종속성을 제거한다.제3정규형일반 속성들 간의 함수 종속 관계가 존재하지 않는다. 이행 함수 종속성을 제거한다.BCNF식별자로 쓰이는 속성이 일반속성에 종속되지 않는다. 후
테이블분할
db설계
한 테이블에 대량의 데이터가 저장된다면, 용량(storage)의 한계와 성능(performence)의 저하가 발생한다. 수평/수직 분할 설계는 테이블 구조를 행또는 열을 기준으로 분할함으로써 로우체이닝, 로우마이그레이션 등의 성능 저하를 예방하는 기법이다. 현상설명로우체이닝(Row Chaining)Row의 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고, 2개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태이다. 하나의 행을 읽을 때 여러개의 데이터 블록을 읽어야 하기 때문에 과정에서 성능이 저하된다.로우 마이그레이션(Row Migration)데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록해서 저장하지 못하는 것을 의미한다. 수평분할(
트랜잭션 ACID와 격리수준
db설계
트랜잭션이란 DB에서 처리되는 논리적인 연산 단위를 의미한다. 1개의 트랜잭션에는 1개 이상의 SQL문이 포함된다. 또한 트랜잭션은 분할할 수 없는 최소의 단위로, 전부 적용하거나 전부 취소하는 ALL OR NOTHING의 개념이다. 트랜잭션은 데이터베이스 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용한다. 트랜잭션의 목적을 달성하며 각각의 트랜잭션을 안전하게 수행하기 위해선 ACID 조건을 충족해야 한다. ACID 원자성 Atomicity 트랜잭션은 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다. 일관성 Consistency 트랜잭션이 실행을 성공적으로 완료하면 데이터베이스
Data Lake와 Warehouse
데이터베이스
데이터 레이크는 구조화되거나 반구조화되거나 구조화되지 않은 대량의 데이터를 저장, 처리, 보호하기 위한 중앙 집중식 저장소이다. 데이터 레이크는 데이터를 기본 형식으로 저장할 수 있으며, 크기 제한을 무시하고 다양한 데이터를 처리할 수 있다. 저장되기 전에 구조화되지 않기 때문에 데이터 웨어하우스보다 훨씬 빠르게 광범위한 데이터에 액세스 할 수 있다. 장점 Agility: 사전 계획 없이 쿼리, data models 또는 applications을 쉽게 구성할 수 있다. SQL 쿼리 외에도 data lake strategy은 real-time analytics, big data analytics 및 machine learning을 지원하는 데 적합하다 Real-time: 실시간으로 여러 소스에서 원본
RabbitMQ
mq
래빗MQ(RabbitMQ)는 오픈소스인 범용 메시지 브로커 소프트웨어이다. RabbitMQ는 온라인 거래 또는 결제 처리와 같이 처리량이 많은 경우에 성능을 개선하는데 사용될 수 있다. 일반적으로 백그라운드 및 cron 작업을 처리하거나 마이크로서비스 간의 메시지 브로커로 사용된다. RabbitMQ는 가볍기 떄문에 클라우드에 배포하기 쉽다. 여러 메시징 프로토콜을 지원하고 분산형 및 혼합형 구성에서 배포를 지원하여 다양한 상황에 적용이 가능하다. 특징 안정성 및 성능 RabbitMQ를 사용하면 메세지를 신뢰성 있고 빠르게 큐 형태로 전달할 수 있다. 유연한 라우팅 메시지는 큐에 도착하기 전에 교환을 통해 라우팅되므로 복잡한 라우팅이 가능하다. 트레이싱 추적 지원을 제공하여 메시징 시스템이 잘못 작동
메시지큐
mq
동기식 통신 방식은 사용자로부터 요청을 받아서 요청을 다 처리할때까지 서버가 다른 행동을 취하지 못하지만, 메세지큐를 사용해 외부에 요청을 맡긴다면 서버가 보다 많은 사람들의 요청을 빠르게 처리할 수 있다. MQ 사용 구조 클라이언트는 서버에 직접 요청하는 것이 아닌 MQ에 전달한다. 그럼 서버는 MQ로 부터 요청 데이터를 수신해서 처리한다. 만약 서버가 요청을 받을 수 없을 수 없는 상황이라면 해당 요청은 서버가 받을 때까지 MQ에 머무르게 된다. 이런 상황에서 MQ에 다운타임이 발생하면 무용지물이 되어버리기 때문에 많은 MQ가 고가용성을 위해 클러스터링 등을 지원한다. Pub/Sub 모델 Pub/Sub 모델은 Publish/Subscribe의 줄임말로 메세지 기반의 미들웨어 시스템을 말한다.
MySQL Replication
데이터베이스
데이터베이스에서 데이터를 복제하는 방식은 크게 동기 방식과 비동기 방식이 있다. 동기 방식: Master 노드에 데이터 변경이 발생할 경우 Slave 노드까지 (동시에) 적용되는 것을 보장한다. 따라서 Master 노드에 장애가 발생하더라도 (데이터 정합성 문제 없이) Slave 노드를 이용하여 서비스를 이어갈 수 있다. 비동기 방식: Master 노드의 변경과 Slave 노드로의 적용이 시차를 두고 동기화됨 Master 노드에서 변경된 데이터가 아직 Slave에 반영되지 못했을 가능성이 있다. 곧 바로 Slave 노드를 이용하여 서비스를 이어갈 경우 데이터 정합성에 문제가 발생할 수 있다. 이러한 두 가지 방식은 성능과 데이터 정합성(정확성)이라는 두 가지 요소 중 어느 것을 중요하게 취급할
Cassandra
nosql
아파치 카산드라(Apache Cassandra)는 자유 오픈 소스 분산형 NoSQL 데이터베이스 관리 시스템(DBMS)의 하나로, 단일 장애점 없이 고성능을 제공하면서 수많은 서버 간의 대용량의 데이터를 관리하기 위해 설계되었다. 카산드라는 여러 데이터센터에 걸쳐 클러스터를 지원하며 masterless 비동기 레플리케이션을 통해 모든 클라이언트에 대한 낮은 레이턴시 운영을 허용하며, 성능 면에서 높은 가치를 보인다. Amazon의 Dynamo 분산 스토리지 및 복제 기술과 Google의 Bigtable 데이터 및 스토리지 엔진 모델이 결합된 모델로 처음에 단계적 이벤트 기반 아키텍처 (SEDA)를 사용하여 Facebook에서 설계되었다. 특징 여러개의 데이터 베이스가 복제된다. (마스터기준) 짧은 지연 시
Memcached VS Redis
nosql
공통점 in-memory cache이다. key-value 저장을 지원한다. (redis는 다른 구조의 데이터 저장 또한 지원한다.) NoSQL이다. Memcached 장점 1. 정적 데이터 캐싱에 효과적 Memcached는 HTML같은 작은, 정적 데이터를 캐싱할 때 효율적이다. Redis만큼 정교하지는 않지만 내부 메모리관리는 단순한 경우에 매우 뛰어나다. (metadata에 더 적은 작원을 소모하기 때문이다) Strings(유일한 지원 데이터 타입)은 추가처리가 필요없어 읽기 전용에 적합하다. 큰 규모의 직렬화된 데이터는 큰 저장공간이 필요하다. Redis 데이터 구조는 데이터의 모든 형태를 그대로 저장할 수 있다. Memcached는 직렬화된 형태로 데이터 저장하도록 제한적이므로 효과적이다. 따라
NoSQL 데이터유형
nosql
NoSQL이라는 용어는 관계형 데이터베이스(RDBMS) 유형에서 벗어난 경량 DBMS류를 부르게 위한 용어이다. NoSQL에는 다양한 DB들이 있는데, 각 DB에서 데이터를 저장하는 유형은 Key–value store, Document store, Graph 세가지 유형으로 나뉠 수 있다. Key–value store Key–value store(KV) 모델은, 데이터는 키와 값의 쌍으로 컬렉션을 표현하는 모델이다. 연관배열(map, dictionary라고도 함)을 기본 자료구조로 가지고있다. Key–value store는 가장 단순한 non-trivial 데이터 모델이며, 선택적인 키 범위를 효율적으로 검색할 수 있다는 강력한 장점을 가지고 있다. 이 모델은 사전 순서로 키를 유지하는 개별적으로 정렬된 모
NoSQL에는 ACID가 없다고?
nosql
관계형 데이터베이스는 트랜잭션 ACID 원칙을 철저히 지켜서 데이터의 무결성을 지키려 한다. 관계형 데이터베이스는 위의 ACID 원칙을 지키기 위해 위와 같은 절차를 진행하게된다. 각 비율은 수행 작업의 비중을 의미한다. 그래프를 보면 정보유지를 위한 자원을 정말 많이 사용한다는것을 알 수 있다 실질적으로 데이터를 넣고 빼고 하는 부분은 오직 12프로인 Useful Work 만 사용하면되는데 말이다. 따라서 RDBMS가 아닌 NoSQL은, 이러한 전통적인 ACID 원칙을 철저하게 지키지 않는 대신 다른 방법을 통해 속도를 향상시키고 데이터 안전성을 챙긴다. BASE 속성 이러한 NoSQL의 특성과 원칙을 나타내는 BASE원칙이라는 것이 있다. Basically Available, Soft state, Ev
PostgreSQL
postgresql
PostgreSQL(포스트그레스큐엘)은 객체-관계형 데이터베이스 시스템(ORDBMS)이다. 테이블 상속, 함수 오버로딩 등의 기능을 갖추고있으며 복잡한 쿼리와 대규모 데이터베이스를 다룰 수 있도록 한다. PostgreSQL은 현재 세계에서 가장 많이 쓰이는 DBMS 중 하나이다. 다양한 프로그래밍 언어 및 어플리케이션을 지원하여 여러 DBMS 중에서도 특히 개발자들이 선호해 충성도가 높은 편이고, 오픈소스 커뮤니티 또한 상당히 활성화되어 있다. 전 세계에서 개최되는 컨퍼런스나 세미나도 꾸준한 편이다. PostgreSQL은 이러한 장점들을 가지고 있다. 1. 최다 SQL 기능 지원 가장 오랜 기간 개발을 거친 PostgreSQL은 관계형 DB 중에서 최다 SQL을 지원한다. 2. 최다 SQL 표준 지원 SQL
OLAP
데이터베이스
OLAP(Online Analytical Processing)는 데이터 웨어하우스, 데이터 마트 또는 기타 중앙화된 통합 데이터 저장소의 대용량 데이터를 고속으로 다차원 분석하는 소프트웨어이다. 대부분의 비즈니스 데이터에는 여러 차원, 즉 프레젠테이션, 추적 또는 분석을 위해 데이터를 분류하는 기준인 여러 범주가 있다. 예를 들어 매출 수치에는 위치(지역, 국가, 주/도, 매장), 시간(연, 월, 주, 일), 제품(의료, 남성/여성/아동, 브랜드, 유형)과 관련된 여러 차원이 있을 수 있는데, 일반적인 데이터베이스로는 2차원 데이터 밖에 저장할 수 없어 저장 성능이나 구현이 복잡할 수 있다. OLAP는 여러 관계형 데이터 세트에서 데이터를 추출한 후 매우 빠른 처리와 분석을 위해 다차원 형식으로 재구성하여
ON절
sql 쿼리
On절은 조인문을 사용할때 조인할 조건을 설정하기 위한 명령어이다. 조회 결과를 필터링한다는 점에서 Where절과 비슷하지만, 실행 시기와 용도에 차이가 있다. On절은 Where절과 다르게 테이블 조인 이전에 실행된다. 그렇기 때문에 Join할 테이블의 일부 컬럼을 가져오고 싶을 때 ON절을 사용한다. 그러나 Inner join을 사용하는 경우엔 조건의 위치와 테이블의 순서에 무관하게 사용할 수 있다. 왜냐하면 조인하는 두 테이블의 위치관계나, 쿼리 순서에 상관없이 결과가 똑같이 교집합으로 나오기 때문이다. On절은, Outer join을 사용할 떄 의미를 가진다. 두개의 테이블이 있다고 가정해보자. A B -1 32 43 54 6 아래의 쿼리로 Left Outer Jo
ORDER BY절
sql 쿼리
ORDER BY절은 SELECT문에서 조회한 데이터 집합을 특정 칼럼 기준으로 정렬한 후 데이터를 출력하는 역할을 한다. 오름차순(ASC) 또는 내림차순(DESC)로 정렬방식을 지정할 수 있다. 정렬방식을 지정하지 않으면 기본적으로 오름차순이 적용된다. 정렬은 일반적으로 숫자에서는 작은 숫자가 먼저, 날짜형 데이터에서는 이른 시간이 먼저, 문자형 데이터에서는 사전순으로 앞서는 문자열이 먼저로 간주된다. Oracle DBMS에서는 NULL값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬헀을 경우에는 가장 먼저 위치한다는 특징이 있다. ORDER BY절 쿼리 예제 SELECT *FROM 테이블명1 AORDER BY A.컬럼명1
계층형 질의
sql 쿼리
계층형 질의란 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위한 구문이다. 계층형 데이터는 동일 테이블에 상위와 하위 데이터가 포함된 데이터를 뜻하고, 엔티티를 순환관계 모델로 설계하는 경우 발생한다. 계층형 질의 사용 방법 쿼리구문설명START WITH계층구조 전개의 시작 위치를 지정하는 구문이다. 루트 데이터를 지정한다.CONNECT BY다음에 전개될 자식 데이터를 지정한다. 자식 데이터는 CONNECT BY 절에 주어진 조건을 만족해야한다.(JOIN)PRIORCONNECT BY 절에 사용되며 현재 읽은 칼럼을 지정한다.PRIOR 자식부모형태를 사용하면 계층구조에서 부모 -자식 방향으로 순방향 전개PRIOR 부모자식 형
서브쿼리
sql 쿼리
서브쿼리란 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다. 조인은 조인에 참여하는 모든 테이블이 대등한 관계에 있기 때문에, 조인에 참여하는 모든 테이블의 컬럼을 어디에서든 자유롭게 사용(참조)할 수 있지만, 서브퀴리는 메인쿼리에서 따로 파생되어 생긴 쿼리이기 떄문에 자유로운 참조가 불가능하다. 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만, 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다. 메인쿼리는 서브쿼리에게 자신의 컬럼을 줄 수 있지만, 서브쿼리의 컬럼을 사용할 순 없다. 반대로 서브쿼리는 메인쿼리가 가지고 있는 컬럼을 사용할 수 있지만, 컬럼을 줄 순 없다. 서브쿼리 사용 위치 서브쿼리 사용이 가능한 위치는 다음과 같다. 똑같은 서브쿼리라도 위치에 따라 다른 명칭으로 불리기도 한
윈도우 함수
sql 쿼리
SELECT문을 통한 작업을 하다보면 결과집합의 각 행과 행의 관계에서 다양한 연산처리를 해야할 떄가 있다. (누적합계, 누적비율, 누적등수 등) 이러한 연산처리를 할 수 있게 하는 것이 바로 윈도우 함수(Window Function)이다. 분석함수라고 불리기도 한다. 윈도우 함수의 종류 순위 함수명설명RANK지정한 기준에 따라 순위를 구하고, 동일한 순위가 있다면 건너뛰고 다음 순위로 산출한다. (1, 2, 2, 4)DENSE_RANK지정한 기준에 따라 순위를 구하고, 동일한 순위가 있다면 건너뛰지 않고 다음 순위로 산출한다. (1, 2, 2, 3)ROW_NUMBER지정한 기준에 따라 순위를 구하고, 동일 순위가 있어도 무조건 순위를 산출한다. (1, 2, 3, ,4)
제약조건
sql 쿼리
제약조건은 테이블에 입력되는 데이터가 사용자가 원하는 조건을 만족하는 데이터만 입력되는 것을 보장한다. 제양조건은 데이터의 무결정을 유지하기 위한 DBMS의 보편적인 방법이다. 제약조건설명PRIMARY KEY테이블에 저장된 행들 중에서 특정 행을 고유하게 식별하기 위해서 사용한다.한 테이블에는 하나의 기본키만 정의할 수 있다.기본키 생성 시 DBMS는 유일 인덱스(Unique index)를 자동으로 생성한다.기본키 칼럼에는 NULL 입력이 불가능하다.기본키는 UNIQUE제약조건과 NOT NULL 제약조건을 만족해야한다.UNIQUE KEY테이블에 저장된 행들 중에서 특정 행을 고유하게 식별하기 위해 생성한다.기본키와 다르게 NULL 입력이 가능하다.N
집계함수
sql 쿼리
집계함수를 이용하면 그룹별 집계 결과를 계산하여 한 행으로 나타낼 수 있다. 대표적인 집계함수는 아래와 같은 것들이 있다. 항목결과COUNT(*)NULL 값을 포함한 행의 수를 출력한다.COUNT(표현식)표현식의 값이 NULL이 아닌 행의 수를 출력한다.SUM(표현식)표현식이 NULL 값인 것을 제외한 합계를 출력한다.AVG(표현식)표현식이 NULL 값인 것을 제외한 평균을 출력한다.MAX(표현식)표현식이 NULL 값인 것을 제외한 최대값을 출력한다.MIN(표현식)표현식이 NULL 값인 것을 제외한 최솟값을 출력한다.STDDEV(표현식)표현식이 NULL 값인 것을 제외한 출력한다.VARIAN(표현식)표현식이 NULL 값인 것을 제외한
집합연산자
sql 쿼리
일반적으로 수학에서 사용되는 집합연산으로는 합집합, 교칩한, 차집합, 곱집합등이 있다. SQL문에서도 각각의 일반집합연산에 해당하는 명령어가 존재한다. 일반집합연산자SQL문설명합집합(UNION 연산)UNION, UNION ALLUNION 연산은 수학적으로 합집합을 하는 연산이다.UNION은 교집합의 중복을 제거한 결과를 나타내기 때문에, 정렬 작업으로 인한 시스템 부하가 일어날 수 있다.UNION ALL을 쓰면 중복 결과를 그대로 보여준다.만일 UNION과 UNION ALL의 출력 결과가 같다면 응답속도 향상, 자원 효율화 측면에서 UNION ALL을 쓰는것이 더 낫다.교집합(INTERSECTION 연산)INTERSECTINTERSECTION은 수학의 교
DB 커넥션 풀
최적화
일반적인 데이터 연동과정은 웹 어플리케이션이 필요할 때마다 데이터베이스에 연결하여 작업하는 방식이다. 하지만 이런 식으로 필요할 때마다 연동해서 작업할 경우 데이터베이스 연결에 시간이 많이 걸리는 문제가 발생한다. 예를들어 거래소의 경우, 동시에 몇천명이 동시에 거래 및 조회 기능을 사용하는데 매번 데이터베이스와 커넥션을 맺고 푸는 작업을 한다면 굉장히 비효율적일 것이다. 이 문제를 해결하기 위해 현재는 웹 어플리케이션이 실행됨과 동시에 연동할 데이터베이스와의 연결을 미리 설정해 두고, 필요할 때마다 미리 연결해 놓은 상태를 이용해 빠르게 데이터베이스와 연동하여 작업하는 방식을 사용한다. 이렇게 미리 데이터베이스와 연결시킨 상태를 유지하는 기술을 커넥션 풀(Connection Pool, CP)이라고 한다.
옵티마이저
최적화
옵티마이저는 사용자가 요청한 SQL문에 대한 최적의 실행 방법을 결정하는 역할을 수행한다. 이떄, 옵티마이저가 도출한 실행 방법을 실행계획이라고 한다. 사용자의 요구사항을 만족하는 결과를 추출할 수 있는 다양한 실행 방법들을 도출한 후, 그중에서 최적의 실행 방법을 결정하는 것이 옵티마이저의 역할이다. 비절차형 언어를 사용하는 경우 필요한 요소중 하나이다. 옵티마이저가 실행 계획을 모색하는 방법에는 룰 기반과 비용 기반이 있다. 룰 기반은 정해진 규칙에 따라 SQL문을 도출하는 방식이고, 비용기반은 다양한 DBMS의 객체정보 및 통계정보를 활용하여 최적의 실행 계획을 도출하는 방법이다. 룰 기반에 비해선 비용기반이 상황에 맞게 효율적인 쿼리를 생성할 수 있기 때문에, 오라클 10 이후 버전부터는 공식적으로
조인 수행원리
최적화
조인이란 2개 이상의 테이블을 하나의 집합으로 만드는 연산이다. FROM 절에 2개 이상의 테이블 혹은 집합이 존재할 경우 조인이 수행된다. 조인은 3개 이상의 테이블을 조인한다고 하더라도 특정 시점에는 2개의 테이블 단위로 조인된다. A, B, C 테이블을 조인한다고 하면 A, B를 조인한 후 해당 결과로 나온 집합을 C와 조인하는 방식이다. 각각의 조인 단계에서는 서로 다른 조인 기법이 사용될 수 있다. 조인 기법 조인 기법의 종류에는 NL 조인, 소트 머지 조인, 해시 조인이 있다. NL 조인 (Nested Loops Join) NL 조인은 첫 번째 집합의 대상 건수만큼 반복하면서 두 번째 집합을 조회하여 매칭되는 행을 리턴하는 조인 기법입니다. 한 레코드(행)씩 순차적으로 진행하기 때문에 처리 범위가
Procedural/Nonprocedural DML
쿼리종류
DML은 사용자가 DB에서 원하는 데이터를 처리할 수 있도록 명세하기 위한 도구이다. 간단하게 말하면 테이블의 데이터를 입력/수정/삭제/조회하는 데 쓰이는 쿼리 명령어라고 할 수 있다. DML은 데이터 처리를 명세하는 방법에 따라 두가지 유형으로 나눌 수 있다. 절차적 데이터 조작어(Procedural DML) 절차적 데이터 조작어는 사용자가 무슨 데이터(What)를 원하며, 그것을 어떻게(How) 접근하여 처리할지 명세해야하는 초급 데이터 언어이다. 이런 데이터 조작어는 데이터 베이스로부터 한 번에 하나의 레코드(One-record-at-a-time)를 검색해서 호스트 언어(해당 응용 프로그램을 작성하는데 사용된 범용 프로그래밍 언어)와 함께 처리하는 특성을 가지고 있다. 비절차적 데이터 조작어(Nonpr
TCL
쿼리종류
TCL은 트랜잭션 제어어를 뜻한다. 트랜잭션이란 DB에서 처리되는 논리적인 연산 단위를 뜻하는데, TCL은 데이터의 변경 후 커밋, 롤백으로 트랜잭션을 완료, 취소하는 작업을 수행할 때 사용한다. 주의점 단, 아래의 경우에는 TCL 명령어와 상관없이 트랜잭션 적용 처리가 일어난다. DDL문이 실행되었을 경우(이전에 실행됐던 DML문도 함께 커밋된다) DB에 대한 접속을 정상적으로 종료한 경우 위와 같은 상황에서는 트랜잭션이 비정상적으로 처리될 위험이 있으므로 데이터베이스 사용 시 꼭 주의해야한다. TCL 쿼리 예제 커밋 COMMIT; 롤백 ROLLBACK; 세이브포인트 SAVEPOINT SVPT; 세이브포인트까지 롤백 ROLLBACK TO SVPT;