본문 바로가기

db

(10)
[Mongo DB] 도규먼트 CRUD 들어가면서 몽고 DB에서 CRUD 하는 방식에 대해서 알아보자. 공부한 책의 예제를 기반으로 작성했기 때문에 movies 컬렉션에서 데이터를 다루는 방식으로 소개하겠습니다. Create 단건 삽입 insertOne 메서드를 이용해서 문서를 만들 수 있습니다. 이때 생성된 문서는 _id 기본키가 추가되어 저장됩니다. db.movies.insertOne( { "title" : "Stand by Me"} )일괄 삽입 많은 수의 문서를 한 번에 전송하면 삽입 속도가 빨라집니다. 한 번에 일괄 삽입할 수 있는 데이터의 크기에는 제한이 있어서 초과되는 데이터는 여러개의 일괄 삽입 요청으로 분할되어 처리됩니다. db.movies.insertMany( [ { "title" : "Stand by Me"}, { "titl..
TIMESTAMP, DATETIME, DATE 타입이란? 들어가면서 최근 면접을 갔는데 TIMESTAMP에 대해서 질문을 받았다. 하지만 시간 관련 속성에 대해서 깊게 생각해본적이 없어서 대답을 해도 틀리게 대답을 했다. 이번 기회에 시간을 나타내는 속성이 어떤 것인지 공부를 하고 정리를 해보았다. DATE 타입 DATE는 년, 월, 일 까지의 시간 정보가 포함된 타입이다. 표현 가능한 범위는 1000-01-01 ~ 9999-12-31이다. DATETIME 타입 DATETIME에서는 년, 월, 일, 시, 분, 초 까지의 시간 정보가 포함된 타입이다. 표현 가능한 범위는 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.499999이다. MySQL에서는 최대 마이크로초(6자리) 정밀도의 소수 초 부분이 포홤될 수 있다. TI..
2장 다양한 NoSQL 데이터 베이스 CAP 이론 분산 데이터베이스는 일관성(C), 가용성(A), 파티션 허용(P), 이 세 가지 속성을 동시에 가질 수 없다는 내용이다. 일관성 : 서버 간에 일관된 데이터를 유지함을 의미 가용성 : 질의에 대한 응답을 제공함 (실패하지 않음) 파티션 허용 : 둘 이상의 데이터베이스 서버가 연결된 네트워크에 문제가 생기더라도 이 서버들은 여전히 일관된 데이터를 갖고 있다는 것 'NO' ACID 'YES' BASE BA(Basically Available) 기본적인 가용성 분산 시스템에서 부분적인 고장이나 실패는 있을 수 있지만 시스템의 나머지 부분은 계속 기능을 수행해야 한다. S(Soft State) 소프트 상태 데이터가 더 최신 상태인 데이터로 덮여 쓰인다. E(Eventually Consistence)..
index가 왜 필요한가? index 란? 도서의 색인이나 사전과 같이 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조 index를 사용하는 이유? 검색 속도(조회 속도)를 향상시키위해서 사용한다. 시스템의 부하를 줄여서 시스템 전체에 대한 성능에 긍정적인 영향을 준다. index가 빠른 이유 1. 효율적인 자료구조 사용 index를 사용한다고 했을 때 주로 B-tree 자료구조를 사용한다. 트리 자료구조를 사용하기 때문에 특정 자료를 검색할 때 O(log N)의 시간 복잡도로 탐색이 가능하다. 반면에 테이블을 전체 조회 (풀 스캔)할 때는 O(N)의 시간 복잡도로 탐색을 해야한다. index가 빠른 이유는 효율적인 자료구조를 적용하였기 때문이다. 2. 캐시 버퍼의 효율적인 사용 테이블에서 데이터를 조회해서 조건을 검색할 ..
QueryDsl 간단한 내용 요약 공식 메뉴얼 version 5 http://querydsl.com/static/querydsl/5.0.0/reference/html_single/ build.gradle querydsl Q class build 하는 방법 https://velog.io/@juhyeon1114/Spring-QueryDsl-gradle-%EC%84%A4%EC%A0%95-Spring-boot-3.0-%EC%9D%B4%EC%83%81 Querydsl 공부하면서 새롭게 만난 객체들 JPAQueryFactory : 버전 4에 추가된 객체로서 쿼리를 생성하는데 도움을 준다. @QueryProjection : dto 객체의 Q class 파일을 빌드하도록 선언하는 역할 BooleanExpression : where 조건에 사용하는 조건..
SELECT 최적화 SELECT 처리 순서 하나의 실행 계획 단위에서 키워드가 적용되는 순서는 다음과 같다. WHERE → JOIN → GROUP BY → DISTINCT → HAVING → ORDER BY → LIMIT 원하는 키워드를 먼저 실행하고 싶다면 서브 쿼리를 이용하여 실행 계획을 분리하여 순서를 임의 변경하여 실행할 수 있다. 하지만 서브 쿼리를 이용하면 조인을 사용하는 것보다 성능 상 좋지 않기 때문에 잘 판단하여 쿼리를 작성하는 것이 좋다. MySQL의 LIMIT VS Oracle ROWNUM MySQL의 LIMIT은 오라클의 ROWNUM과 성격이 달라서 WHERE 조건으로 사용되지 않고 항상 모든 처리의 결과에 대하여 레코드 건수를 제한하는 형태로 사용한다. 각 키워드의 성능 최적화 방식 성능을 이끌어 내..
MySQL 연산자와 내장 함수 연산자 동등 비교 Null safe NULL을 하나의 값으로 인식하고 비교함으로 NULL을 반환하지 않는다. Null unsafe = NULL을 비교시에는 NULL을 반환한다. 부정 비교 , != NOT 연산 !, NOT AND, OR 연산 divide 연산 /, DIV, %, MOD REGEXP 연산 REGEXP, RLIKE 정규 표현식을 비교하는 연산자 문자열 칼럼 비교에 사용할 때 REGEXP 조건의 비교는 인덱스 레인지 스캔을 사용 X LIKE 연산 % : 0 또는 1 이상의 모든 문자 _ : 정확히 하나의 문자 ESCAPE : %, _ 문자 비교를 위해서 escape 문자를 설정하여 %, _사용이 가능하게 함 ex) select ‘a%’ LIKE ‘a/%’ ESCAPE ‘/‘; BETWEEN 연..
MySQL의 주요 처리 방식 1. 풀 테이블 스캔 풀테이블 스캔이란? 인덱스를 사용하지 않고 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업 MyISAM 스토리지 엔진 풀 테이블 스캔시 디스크로부터 페이지를 하나씩 읽어 온다. InnoDB 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드(Read ahead) 작업을 자동으로 시작한다. 이 경우 필요한 데이터를 미리 읽어 두었기 때문에 좀 더 빠른 성능을 보장할 수 있다. + Read ahead? 어떤 영역의 데이터가 앞으로 필요해지리라는 것을 예측해서 요청이 오기 전에 미리 디스크에서 읽어 InnoDB의 버퍼 풀에 가져다 두는 것 2. ORDER BY 처리, Using filesort 인덱스를 사용한 정렬 이미 정렬된 기준이 인..