본문 바로가기
반응형

Computer Science/Database15

[Redis] 레디스와 캐시 그리고 데이터구조 이번에 회사에서 프로젝트를 맡으면서 redis를 접할기회가 생겼다. 근데 익숙하지 않은 데이터베이스라서 한번 정리해보려고 한다. 그리고 시작하기 전에 레디스를 살펴볼 gui툴로 medis도 설치했다. 2022.02.06 - Mac M1에서 가능한 Redis GUI Client 프로그램 : Medis2 지금까지 레디스를 단순히 캐쉬용으로 쓰이는 데이터베이스라고만 알고 있었다. 이번기회에 캐쉬용이 어떤건지, 그래서 레디스가 어떤 특징이 있는지 자세히 알아보려고 한다. Cache 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스해주는 것 즉, 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 캐시에 접근해서 요청을 처리하는 것. 예를 들어, 캐쉬는 아래와 같은 f.. 2022. 2. 7.
[MySQL] 인덱스구조 : 클러스터링인덱스/넌 클러스터링인덱스 클러스터 : 여러개를 하나로 묶는다는 의미 mysql에서 클러스터링인덱스는 innoDB와 TokuDB 스토리지 엔진에서만 지원 클러스러링 인덱스 테이블의 PK에 대해서만 적용된다. (PK는 클러스터링 인덱스의 기준) 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하는 것 PK에 의해 레코드 저장 위치가 결정된다. PK값이 변경되면 -> 레코드의 물리적인 저장위치가 바뀐다->랜덤액세스가 많이 발생해서 IO증가 그러니까, PK를 신중하게 결정해야한다. 그럼 뭐가 좋은데? PK기반의 검색속도는 빠르다. 넌클러스터링구조와 비교 테이블 구조 자체는 일반 B-트리랑 비슷 B-트리구조의 리프로드에는 파일이 저장되어 있는 주소들이 있음. 그래서 이 주소를 따라 페이지번호로 가면 자식주소까지 찾아가서 데이터를 찾는 방.. 2020. 1. 30.
[MySQL] 로그(General/Slow쿼리) 로그 어떤 에러가 발생했는지, 어떤 쿼리를 돌렸는지 볼 수 있음 디폴트는 에러보고 로그 접속 정보나 쿼리에 대한 로그를 알고 싶으면 따로 설정을 해줘야댐 1. 제너럴 로그(General_log) 사용자가 던진 모든 쿼리에 대한 기록 ->어떤 에러가 발생했는지, 어떤 쿼리를 돌렸는지 볼 수 있음 해당하는 경로에 들어가면 쿼리정보를 볼 수 이씀 sud vi 위에 경로명 2. 슬로우쿼리 로그 어떤 쿼리 때문에 느린지 알고 싶을때 *슬로우쿼리 : 클라이언트로 부터 받은 쿼리를 수행할때 일정시간 이상 수행되지 못한 쿼리들 슬로우쿼리가 많으면 성능저하가 발생한다. mysql을 사용할때 mysqld가 cpu를 많이 잡아먹거나 db접속이 원활하지 않으면 슬로우쿼리 확인하기 제너럴 쿼리랑 다른점은? 둘다, 사용자가 던진.. 2020. 1. 27.
[MySQL] 트랜잭션 격리수준(Isolation level) 트랜잭션 : 하나의 작업처리단위 이렇게 작업을 하나씩 순차적으로 진행하면? 1)데이터무결성 보장(ACID특징) 모두 성공적으로 처리되나(Commit) 실패할 경우 원상태로 되돌아가기 때문에(Rollback) 부분업데이트가 발생하지 않음 *데이터 정합성(Automicity) 보장 : 트랜잭션 -> 동시에 수행되는 트랜잭션끼리 데이터의 일관성 유지하도록 보장 *데이터 고립성(Isolation) 제어 : Lock기능 -> 동시에 수행되는 트랜잭션끼리 영향을 미치지 않도록 제어 2)직렬화(Serialization)가 됨 하지만, 다수의 클라이언트가 DB에 동시에 접근해서 사용해야 됨 -> 동시성도 보장되어야 함 -> 어떻게? 격리수준(Isolation level) 동시에 여러 트랜잭션이 처리될 때 다른 트랜잭션.. 2020. 1. 25.
[MySQL]복제구축(mysqldump로 백업하기) 1. MySQL복제란?(Replication) 물리적으로 다른 서버의 저장공간안에 동일한 데이터를 복사하는 것 즉, 1개의 Master 서버를 여러개의 Slave 서버에 복제하는 작업 2. 왜 사용하는가? 무슨목적으로? 1. 백업 2.부하분산 1) 백업 실시간으로 Master서버에서 변경된 데이터를 Slave서버에 복사하여 백업할 수 있습니다. 그래서 Master서버의 장애가 발생하였을 경우 Slave서버로 변경할 수 있습니다. 2) 부하분산 사용자가 증가하여 1대의 서버에서 읽기 부하가 발생할 경우 유용하게 사용가능 그래서 Master는 INSERT/UPDATE/DELETE 요청을 받아 쓰기전용으로 사용하고, Slave는 로 SELECT 요청을 받아 읽기전용으로 사용 3. 실시간으로 데이터 복제가 가능.. 2020. 1. 23.
데이터파이프라인/데이터프로덕트/수집/정제 용어정리 1. 데이터파이프라인 : 데이터가 흘러다니는 길 데이터를 수집하고 정제하고 다시 보내는 과정은 데이터 파이프라인을 통해 이루어짐 1) 데이터 스키마 어떤 형태로 어떤 값들이 언제 남아야 하는지 남겨둔 규칙이나 모양 2) 로킹 : 데이터를 남기는 활동, 사용자의 활동을 앱에서 Google Analytics처럼 바로 보낼수도 있고, 서버에서 이벤트를 디비에 저장하고, 그것을 옮겨 가거나 아니면 api의 로그파일로 남겨 긁어가는 방법. 3) 수집 데이터를 어디로 전송하거나, 파일로남겼거나, 디비에 저장했다면 중앙화된 저장소로 옮김 연산된 형태를 고려해서 값을 변경하거나, 필요한 저장소를 결정 4) 정제 로그를 전송 중에(데이터가 파이프라인 안에서 이동되는 동안) 유실이나 중복이 될 수 있음, 또는 서버의 버그.. 2020. 1. 23.
[Mysql아키텍쳐3] InnoDB특징/MyISAM특징 내부적으로 어떻게 작동는지 이해하기 출처 RealMysql 서적을 기반으로 이해한 내용 정리 1.InnoDB 스토리지 엔진 특징 1) 트랜잭션 지원 -> 데이터 무결성 보장 트랜잭션 위주로 진행되기 때문에 ACID특징을 보장함(커밋/롤백지원) 그래서 데이터의 일관성,정확성이 높다. https://pearlluck.tistory.com/17 트랜잭션 특징(ACID) /Rollback /Commit 트랜잭션 데이터베이스의 상태를 변화시키는 하나의 작업단위를 의미합니다. DB의 상태는 딱! 2개 Rollback과 commit만 있음 그래서 두가지 상태를 작업하는 실행단위들 왜 트랜잭션이 필요할까? 왜 DB는 트랜잭션.. pearlluck.tistory.com 2) 동시성 수준 높음 -> Row-level의 L.. 2020. 1. 22.
🚀 DB JOIN 정리(INNER/LEFT/RIGHT/OUTER) join(조인) 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야함 이 공유하고 있는 컬럼을 PK 또는 FK값으로 사용 ​ 종류 1. INNER JOIN : 내부조인 ->교집합 2. LEFT/RIGHT JOIN -> 부분집합 3. OUTER JOIN : 외부조인 ->합집합 오라클은 OUTER JOIN있지만, MYSQL은 없어서 LEFT조인 + RIGHT조인 ​ ​ 예를 들어 두가지 테이블(T1,T2)이 있다고 하면, 이걸로 join결과를 그림으로 그려보면서 복습해보자 A ID ENAME 1 AAA 2 BBB 3 CCC B ID KNAME 1 가 2 나 4 라 5 마 1. INNER JOIN : 교집합, 공통적인 부분만 SEELCT됨 ​ ID E.. 2020. 1. 21.
SQL 기본문법정리1(DDL/DML/DCL/TCL) 데이터 정의어(DDL) 테이블의 구조를 정의함 CREATE, ALTER, DRTOP,TRUNCATE 데이터 조작어(DML) 데이터 조회/삽입/삭제/변경 SELECT, INSERT, UPDATE ,DELETE 데이터 제어어(DCL) 데이터베이스에 접근권한 GRANT, REVOKE 트랜잭션 제어어(TCL) 트랜잭션 제어명령어 COMMIT, ROLLBACK, SAVEPOINT 1. DDL 데이터정의어 1) 테이블 생성 : CREATE문 create table tr_test( id int not null auto_increment, name varchar(10) not null not null, primary key(id) ) 2) 테이블 삭제 : DROP문 DRTOP table tr_test; 3) 테이블 삭.. 2020. 1. 20.
[Mysql아키텍쳐2] 스레드구조/IO매커니즘/InnoDB 내부구조 내부적으로 어떻게 작동는지 이해하기 출처 RealMysql 서적을 기반으로 이해한 내용 정리 1. Mysql스레딩구조 MySQL서버는 프로세스 기반이 아니라 '스레드'기반 (클라이언트 별로 커넥션을 주면서, 다수의 클라이언트가 연결되는 멀티스레드방식) 1) 포그라운드 스레드(클라이언트 스레드) 몇개? 최소한 서버에 접속된 클라이언트 수만큼 존재 무슨일? 사용자가 요청하는 쿼리문장을 처리하는 역할 어떤 요청이 있는데? 데이터를 MySQL의 데이터 버퍼에나 캐시로 부터 가지고 오는거, 버퍼나 캐시에 없으면 직접 디스크의 데이터나 인덱스 파일에서 읽어오는 작업 스토리지엔진에 따라 포그라운스레드가 하는일이 다름! MyISAM : 읽기 작업을 주로 하기 때문에 '디스크' 쓰기 작업까지 함 InnoDB : 데이터 .. 2020. 1. 20.
728x90