Database 85

[Real MySQL] 16-3. 복제: 데이터 포맷

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 이벤트들이 바이너리 로그에 어떤 형태로 저장되는지에 대한 구분 1. Statement 기반 바이너리 로그 포맷이벤트를 발생시킨 SQL문을 바이너리 로그에 기록하는 방식 장점저장 공간 용량에 대한 부담이 적어짐백업 및 복제 작업이 빠르게 처리됨 단점비확정적인 쿼리 사용시, 동기화가 정확히 이루어지지 않을 수 있음RAND(), VERSION()SELECT FOR UPDATE / SHARE에서 NOWAIT이나 SKIP LOCKED 옵션 사용사용자 정의 함수 or 스토어드 프로시저 사용데이터에 락을 많이 검풀 테이블 스캔이 발생할 가능성 있음트랜잭션 격리 수준이 "READABLE-READ" 이상이어야 함 2. Row 기반 바이너리 로그 포..

Database/Mysql 2024.09.07

[Real MySQL] 16-1. 복제: 아키텍처

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 데이터베이스를 운영할 때, 가장 필요한 두가지는 확장성과 가용성복제는 이 두요소를 위해 사용되는 기술 1. 복제한 서버에서 다른 서버로 동기화되는 것 Source Server원본 데이터를 가진 서버변경이 최초로 이루어짐 (데이터 및 스키마) Replica Server소스 서버로부터 변경 내역을 전달받는 서버소스 서버 동기화소스 서버로부터 데이터를 전달받아 자신의 리포지토리에 반영 목적scale-out트래픽 대응 목적scale-up보다 훨씬 더 유연한 구조 backup데이터 정합성이 깨질 경우백업 서버의 데이터로 사용함메인 서버가 터질 경우지리적으로 분산된 백업 서버가 메인 서버의 역할을 대신함 데이터 분석용데이터 분석은 리소스 소모..

Database/Mysql 2024.09.07

[Real MySQL] 8-1. 인덱스: Disk

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. HDD (Hard Disk Drive)플래터 (디스크)데이터 보관플래터 위를 헤드가 이동하면서 데이터 읽고 씀기계적인 작동 원리를 기반으로 하기 때문에 속도가 상대적으로 느림 인터페이스SATA(소비자용)SAS(고성능) 2. SSD (Solid State Drive)반도체기계식 플래터에 비해 훨씬 빠릅니다. (기계식으로 플래터를 회전시킬 필요 없음)소음 X 플래시 메모리 (NAND)비휘발성내구성: 기계적인 부품이 없으므로 물리적 충격에 강하고 내구성이 뛰어남

Database/Mysql 2024.09.07

[Real MySQL] 8-7. 인덱스: 멀티 밸류 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 멀티 밸류 인덱스하나의 데이터 레코드가 여러 개의 키 값을 가질 수 있는 형태의 인덱스JSON 배열과 같은 비정형 데이터에서 원소별 인덱싱이 필요할 때 사용됨 특징인덱스 내에서 하나의 레코드가 여러 개의 엔트리를 가질 수 있음JSON 필드에 저장된 배열 원소들에 대한 인덱싱을 위해 설계됨배열을 가진 모든 레코드에 대해 다수의 인덱스 엔트리가 생성되므로, 인덱스 크기가 커질 수 있음 예시CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, items JSON, INDEX idx_items ((CAST(items->'$[*]' AS UNSIGNED ARRAY))));..

Database/Mysql 2024.09.07

[Real MySQL] 8-6. 인덱스: 함수 기반 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 함수 기반 인덱스칼럼의 값을 변형해서 만들어진 값에 대해 구축된 인덱스계산 과정의 차이만 있을 뿐 내부 구조 및 유지관리 방법은 B-Tree 인덱스와 동일 가상 칼럼을 이용한 구현현재 존재하는 컬럼을 사용하여 가상 컬럼 및 인덱스 생성 가능단, 테이블의 구조가 변경됨ALTER TABLE user ADD full_name VARCHAR(30) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL, ADD INDEX ix_fullname (full_name); 함수를 이용한 구현함수를 직접사용하는 인덱스테이블의 구조를 변경하지 않음CREATE TABLE user ( first_name VA..

Database/Mysql 2024.09.07

[Real MySQL] 8-8. 인덱스: 클러스터링 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 클러스터링 인덱스프라이머리 키 값을 기준으로 정렬하여 저장하는 방식InnoDB 에서는 테이블 자체가 클러스터링 인덱스 구조로 관리됨 (InnoDB 전용 기능) B+Tree 자료구조레코드 저장 방식클러스터링 인덱스는 인덱스 알고리즘이 아니라 테이블의 저장 방식임테이블 자체가 프라이머리 키를 기준으로 정렬된 하나의 거대한 인덱스 구조로 관리됨프라이머리 키 값 기준 가까운 레코드들이 물리적으로 인접하여 저장됨 프라이머리 키를 기준으로 레코드가 묶여서 저장됨범위 검색이나 프라이머리 키 기반 조회가 매우 빠름 쓰기 성능 고려프라이머리 키 순서대로 입력하면 성능이 좋음키 값이 변경되면 물리적으로 리프 노드의 위치가 변할 수 있음 장점프라..

Database/Mysql 2024.09.07

[Real MySQL] 8-9. 인덱스: 유니크 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. Unique Index유니크 제약테이블에 특정 컬럼의 값이 중복되지 않도록 보장하는 제약유니크 제약이 설정된 컬럼은 같은 값이 두 번 이상 저장되지 않도록 함인덱스와 밀접한 연관이 있음MySQL에서는 인덱스 없이 유니크 제약을 설정할 수 없음내부적으로 인덱스를 자동으로 생성하여 중복 값 체크를 수행함 Nullable해당 컬럼에 NULL 값이 허용된다는 의미NULL은 특정 값이 없다는 표시이며, 다른 값들과 다르게 취급됨 즉 NULL은 값 없음을 의미할 뿐, 다른 값들과는 비교할 수 없음NULL이 여러 번 있을 수 있음NULL은 특정 값이 아니기 때문에 같은 컬러멩서 두 개 이상의 NULL값이 허용될 수 있음 유니크 인덱스와 일..

Database/Mysql 2024.09.07

[Redis] 2. Understanding Data Types

cachingqueuingevent processing 1. Stringbyte sequence 저장문자열 매핑에 주로 사용됩니다. (key, value 모두 문자열) Data StructureTextSerialized objectBinary array(image, video, audio) Usagecachecountersbitwise operation 더보기SET bike:1 Deimos # key(namespace:id) - valueGET bike:1 # Deimos 2. JSONSyntax: JSONPath UsageAPI Response (cached) 더보기JSON.SET user:1001 $ '{"name": "John Doe", "email": "john.doe@example.com", ..

Database/Redis 2024.09.05

[NoSQL] NoSQL

1. NoSQL이란?Not Only SQL (SQL 지원)RDBMS보다 덜 제한적인 일관성 모델을 사용하는 데이터 매커니즘 유연한 데이터 모델스키마가 고정되어 있지 않음 대규모 분산 데이터클라우드 컴퓨팅 등장에 맞춰 생긴 기술데이터 공유 및 시스템 운용의 효율성 좋음 2. 장점성능latency: 빠르게 데이터 읽고 쓸 수 있음throughput: 다수의 요청을 효율적으로 처리할 수 있음 (수평적 확장) 단순성설계: 논리적, 물리적 설계 스킵clustering: 분산환경에서 사용하기 용이하도록 지원partitioning (horizontal): 분산환경에서 사용하기 용이하도록 지원 3. 종류key-value데이터: key-value 쌍빠른 데이터 접근 가능Redis, DynamoDB, Riak wide c..

Database 2024.09.05

[Real MySQL] 5-2. 트랜잭션과 잠금: 격리 수준

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 4. 격리 수준여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지뒤로갈수록 고립도는 높아지고, 동시성과 성능은 떨어집니다. 종류격리 수준설명허용되는 현상성능일관성READ UNCOMMITTED커밋되지 않은 데이터도 읽기 가능Dirty Read매우 높음매우 낮음READ COMMITTED커밋된 데이터만 읽기 가능. 동일 쿼리 결과가 다를 수 있음Non-Repeatable ReadPhantom Read높음중간REPEATABLE READ(InnoDB 기본값)트랜잭션 내에서는 항상 동일한 데..

Database/Mysql 2024.08.10