Database 85

[실전 레디스] 2-3. 자료형과 기능: 보조 기능

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다. 1. Pub/Sub발행자가 구독자에게 메시지를 보내는 패턴자료형이 아닌 기능 형태로 제공됨 요소역할설명구독자- 하나 이상의 channel을 구독할 수 있음- 구독한 채널에서 발행되는 메시지를 실시간으로 수신함발행자- 특정 채널을 지정해 PUBLISH함- 채널을 구독 중인 모든 구독자에게 메시지가 동시 전송됨 명령어구독더보기subscribe mychannel1unsubscribe mychannel1psubscribe my*punsubscribe my*ssubscribe shd1sunsubscribe shd1ssubscribe: 샤드 ID로 구독 발행더보기publish mychannel1 "Hello, World!"spublish shd1 "He..

Database/Redis 2025.03.21

[실전 레디스] 2-2. 자료형과 기능: 보조 자료형

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.보조 자료형은 모든 자료형에서 사용될 수 있음 1. Bitmap1비트 단위로 데이터를 표현하는 방식실제로는 String 형으로 정의되어 있음 장점장점설명메모리 절약하나의 비트만으로 상태를 표현 가능샤딩 용이예를 들어 유저 ID의 해시값을 기준으로 여러 Bitmap 키로 분리해서 수평 분산 저장 가능 명령어생성더보기setbit visitor:20220829 100 1setbit visitor:20220829 200 1setbit visitor:20220830 400 1 읽기더보기getbit visitor:20220829-20220830 100bitcount visitor:20220829-20220830bitpos visitor:20220829-..

Database/Redis 2025.03.20

[실전 레디스] 2-1. 자료형과 기능: 기본 자료형

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.0. 개요개념설명네임스페이스Redis는 전역 키 공간을 사용하며, 모든 키가 동일한 스코프에 존재함키 충돌 방지를 위해 보통 prefix 사용키 어노테이션개발자는 키 명명 규칙에 의미를 부여하거나, 별도 메타 키를 만들어 관계나 트리거 로직을 명시적으로 관리함 네임 스페이스) prefix더보기구조: user::SET user:1001:name "Redis"SET user:1001:email "redis@example.com"MGET user:1001:name user:1001:email키 충돌 방지그룹 관리 용이 네임 스페이스) DB 번호더보기0: 세션 관리용SELECT 0SET session:1234 "login" 1: 캐시 관리용SELECT..

Database/Redis 2025.03.20

[실전 레디스] 1. 레디스의 시작

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다. 1. NoSQL구분내용특징- 빠른 속도- 특정 데이터 모델에 최적화됨 (일부 데이터 모델은 RDBMS로 구현 시 복잡)유형- Key-Value Store- Column-Oriented DB- Document-Oriented DB- Graph DB 예시) GraphDB - 소셜 네트워크더보기연결 정보 저장예: A는 B의 친구이고, B는 C의 친구이고, C는 A의 친구다 GraphDB(Neo4j)각 사람을 노드, 친구 관계를 엣지로 표현 (MATCH (a)-[:FRIEND]-(b)-[:FRIEND]-(c))관계 중심 모델에 최적화 RDBMSJoin 반복이나 재귀 쿼리를 써야 함 → 느리고 복잡함 예시) Document-Oriented DB - 이..

Database/Redis 2025.03.19

[업무에 바로 쓰는 SQL 튜닝] 5. 악성 SQL 튜닝으로 전문가 되기

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. SQL 문 재작성으로 착한 쿼리 만들기처음부터 모든 데이터를 가져오는 SQL문explainselect 사원.사원번호, 급여.평균연봉, 급여.최고연봉, 급여.최저연봉 from 사원, ( select 사원번호, round(avg(연봉), 0) 평균연봉, round(min(연봉), 0) 최고연봉, round(min(연봉), 0) 최저연봉 from 급여 group by 사원번호 ) 급여 where 사원.사원번호 = 급여.사원번호 and 사원.사원번호 between 10001 and 10100;급여 테이블에서 그룹핑 시, 거의 전체 테이블을 스캔함사원 테이블에서 필터링된 데이터는 100건에 불과함 explainselec..

Database/Mysql 2025.03.19

[업무에 바로 쓰는 SQL 튜닝] 4. 악성 SQL 튜닝으로 초보자 탈출하기

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 준비실무적인 튜닝 절차 이해하기1. 현황 파악결과 및 소요 시간 확인실행계획 분석 ("EXPLAIN ANALYZE")단계별 소요 시간 확인 ("SHOW PROFILE FOR QUERY")쿼리 비용 확인 ("SHOW STATUS LIKE 'Last_query_cost'")조인/서브쿼리 구조 확인 ("EXPLAIN")동등/범위 조건프라이머리 키나 유니크 키로 사용되는 지 확인range로 처리되는지 확인ICP를 활용할 수 있는지 확인 2. 튜닝 방향 판단 및 개선 2. SQL 문 단순 수정으로 착한 쿼리 만들기기본키 변형explain select * from 사원 where substring(사원번호,1,4) = 1100 and length(..

Database/Mysql 2025.03.18

[업무에 바로 쓰는 SQL 튜닝] 2. SQL 튜닝 용어를 직관적으로 이해하기

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 물리 엔진과 오브젝트 용어SQL 프로세스 용어파서사용자가 요청한 SQL 문을 쪼개 최소 단위로 분리하고 트리를 만듬트리를 만들면서 문법 검사를 수행함 전처리기파서에서 생성한 트리를 토대로 SQL 문에 구조적인 문제가 없는지 확인SQL 문에 사용된 오브젝트들이 실직적으로 존재하는지, 접근 권한은 부여되어 있는지 확인 옵티마이저전달된 파서 트리를 토대로 연산 과정을 단순화함 (필요하지 않은 조건을 제거함)실행 계획 수립 (테이블 접근 순서, 인덱스 사용 유무, 임시테이블 사용 유무) 엔진 실행기수립된 실행 계획을 참고하여 스토리지 엔진에서 데이터를 가져옴읽어온 데이터를 정렬하거나 조인불필요한 데이터는 필터링 DB 오브젝트 용어기본키특정 행..

Database/Mysql 2025.03.18

[업무에 바로 쓰는 SQL 튜닝] 1. MySQL과 MariaDB 개요

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 현황MySQL1995년 오픈소스로 배포된 DBMS2010년 오라클(Oracle)에 인수됨상용 버전과 무료 버전으로 구분됨장점: 대용량 데이터 처리, 높은 가용성, 안정성 MariaDBMySQL 핵심 개발자들이 독립하여 MariaDB 개발MySQL이 오라클에 인수되면서 라이선스 정책 및 개발 방향 변화오픈소스 정책을 유지MySQL 5.5 버전 이후 독자적인 길을 걷기 시작SQL 문법과 실행 계획 출력 방식은 MySQL과 유사옵티마이저 기능 등 일부 차이점 존재 2. 상용 RDBMS와의 차이점구조적 차이구분 Oracle MySQL이중화 스토리지 구조Shared Storage (공유 스토리지) - 통합된 스토리지 하나를 공유Shared-No..

Database/Mysql 2025.03.18

[Real MySQL] 16-2. 복제: 타입

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 소스 서버의 바이너리 로그에 기록된 변경내역들을 식별하는 방식에 따라 나뉨 1. 바이너리 로그 파일 위치 기반 복제소스 서버의 바이너리 로그 파일명과 파일 내에서의 위치로 개별 바이너리 로그 이벤트를 식별해서 복제함이벤트 하나하나를 바이너리 로그 파일명과 파일내에서의 위치값의 조합으로 식별함레플레카 서버에서 소스 서버의 어떤 이벤트부터 동기화를 수행할 것인지 설정해야 함어느 이벤트까지 로컬 디스크로 가져왔고 적용했는지 관리다음번에 가져올 이벤트를 표시하려는 목적 필수 사항복제 구성원이 되는 MySQL 서버가 고유의 server_id를 가지고 있어야 함소스 서버에서 반드시 바이너리 로그가 활성화돼 있어야 함기본적으로 활성화 되어 있음..

Database/Mysql 2025.03.14

[Real MySQL] 14-2. 스토어드 프로그램: 참고사항

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.3. 보안 옵션DEFINIER / SQL SECURITY각 스토어드 프로그램을 생성하고 실행하는 권한 DEFINIERCREATE DEFINER='admin'@'%' PROCEDURE sp_test()BEGIN SELECT 'Hello, world!';END;소유권과 같은 의미기본적으로 설정됨 SQL SECURITYCREATE DEFINER='admin'@'%' PROCEDURE sp_test()SQL SECURITY DEFINERBEGIN SELECT * FROM sensitive_data;END;스토어드 프로그램을 실행할 때 누구의 권한으로 실행할지 결정하는 옵션DEFINIER: 생성한 사용자의 권한으로 실행INVOKER..

Database/Mysql 2025.03.13