tech/database 12

[mysql] 업데이트시 innodb buffer pool, redo log, disk io 동작에 관하여

InnoDB에서 UPDATE의 내부 동작 순서UPDATE 실행 시 해당 row가 속한 페이지를 Buffer Pool로 로딩페이지 단위(기본 16KB)작은 컬럼 하나만 바꿔도, 그 row가 있는 페이지 전체가 메모리로 올라옴변경 적용 (메모리 내에서)실제 데이터를 수정하고해당 페이지는 "Dirty Page" 로 표시됨Redo Log에 변경 내용 기록 (WAL - Write Ahead Logging)변경 직후 Redo Log에 먼저 기록됨이건 충돌 시 복구용이때 디스크에는 아직 안 씀Undo Log에도 기록 (MVCC / Rollback용)Checkpoint 또는 flush 조건 만족 시 디스크에 기록일정 시간이나 페이지 수, Redo Log 크기 초과 등 조건에 따라Dirty Page를 디스크로 flush..

tech/database 2025.03.26

[redis] aws elasticache network throttling 현상에 관하여

- micro burst 현상aws elasticache metric에서 network in/out 그래프를 볼 수 있는데, 가끔 인스턴스의 network bandwidth 안쪽으로만 계속 쓰고 있는것으로 나오는데도 network bandwidth exceed 현상이 발생하는것을 볼 수 있다. 아래 글에서 원인중 하나가 나오는데, 요약하자면 metric에서 확인할 수 있는 network in/out 은 측정단위가 분 이고 실제 network bandwidth exceed 판단은 초단위이기 때문이라는 것이다. 만약 분단위로는 bandwidth 를 초과하지 않는것 같다 하더라도 초단위로 측정했을때 특정 순간에서 bandwidth 가 초과되는 micro burst현상이 발생한다면 exceed 로 판단되어 pa..

tech/database 2024.10.20

[redis] 레디스 내부 동작 이해 : sorted set

오늘은 레디스의 sorted set 의 내부 작동원리에 대해 이해한것을 정리해보려 한다. 아래 내용이 포함된다.1. sorted set 지원 기능 정리2. sorted set 내부 동작원리3. skip list 자료구조의 주요 기능(탐색, 삽입, 삭제..)들이 왜 O(log N)인지에 대한 수학적 분석4. sorted set은 왜 내부적으로 BST를 쓰지 않았을까?(이건 TMI지만 개인적인 호기심ㅎ)5. hash table 자료구조 동작원리 Overviewsorted set은 고유한 요소(멤버)와 실수형 점수를 쌍으로 저장하며, 점수를 기준으로 항상 정렬된 상태를 유지하는 데이터 구조이다. 시간복잡도 측면에서 당연하겠지만 모든기능은 O(log N)이다(시간복잡도란 해당기능이 수행되는데 걸리는 시간을 데이..

tech/database 2024.10.03

[Kafka] 카프카 프로듀서

Kafka는 대용량 데이터의 실시간 처리를 위한 분산 스트리밍 플랫폼이다. 오늘은 Kafka 프로듀서가 메시지를 브로커의 토픽 파티션에 적재하는 과정과 메시지 전송의 신뢰성을 높이기 위한 주요 설정값들에 대해 정리한다.1. 프로듀서에서 브로커의 토픽 파티션으로 메시지 전송 과정Kafka 프로듀서는 애플리케이션에서 생성된 메시지를 브로커의 특정 토픽 파티션에 안전하게 전달하는 역할을 수행한다. 이 과정에서 메시지가 파티셔너를 거쳐 브로커에 적재되고 응답을 받기까지의 구체적인 흐름을 단계별로 설명한다.1. 메시지 생성 및 전송 요청프로듀서는 애플리케이션으로부터 전송할 데이터(record)를 생성한다. 이 데이터는 키(key)와 값(value), 그리고 선택적인 헤더(headers)로 구성된다. 프로듀서는 이..

tech/database 2024.09.21

[카프카] Simple Authentication and Security Layer(SASL)

오늘은 카프카의 보안프로토콜에 사용되는 Simple Authentication and Security Layer(SASL)에 관하여 정리해보려 한다. SASL 에 관하여 이야기하려면 카프카의 보안프로토콜에 대해 먼저 설명이 필요하다. 카프카는 2개의 보안관련 표준기술인 Transport Layer Security(TLS)와 Simple Authentication and Security Layer(SASL) 을 사용해서 4개의 보안프로토콜을 지원한다. 4개의 보안 프로토콜은 전송계층보안(SSL, PlainText 중 택1), 인증계층보안(SASL, SSL 택1) 을 조합하여 정의된다.  SASL은 클라이언트와 서버 간의 인증을 위한 프레임워크다. 다양한 인증 메커니즘을 지원하며, 애플리케이션 프로토콜과 독..

tech/database 2024.09.18

[MySQL] 트랜잭션 및 잠금

MySQL에서 Row락에 대한 개념은 특별히 상세하게 알아야 할 필요가 있다. MySQL에서는 특별하게 Row Lock을 잡을때 Index의 record를 잠그기 때문에 여러 이상현상이 나타날 수 있기도 하고, Transaction Isolation Level 에 따라 Lock 의 기본설정이 다르기도 하여 여러모로 중요하다!  아무튼 오늘은 MySQL의 트랜잭션(Transaction)과 잠금(Locking)에 대한 주제로 관련 지식을 정리한다.1. 트랜잭션(Transaction)트랜잭션은 일련의 작업을 하나의 단위로 묶어 실행하는 것을 의미한다. 이 작업들은 모두 성공하거나, 모두 실패해야 한다. 이를 위해 트랜잭션은 네 가지 ACID 특성을 준수한다.ACID 특성Atomicity (원자성): 트랜잭션 ..

tech/database 2024.09.16

[MySQL] InnoDB 스토리지 엔진 아키텍처

MySQL의 InnoDB 스토리지 엔진은 MySQL에서 가장 널리 사용되는 트랜잭션 기반 스토리지 엔진 중 하나로, ACID(Atomicity, Consistency, Isolation, Durability) 속성을 지원하는 아키텍처를 제공한다. 오늘은 InnoDB 스토리지 엔진의 주요 아키텍처와 이를 통해 제공되는 중요한 기능들을 정리한다.1. InnoDB 아키텍처 개요InnoDB는 트랜잭션과 데이터 무결성을 보장하면서 고성능을 제공하기 위해 설계된 스토리지 엔진이다. MySQL에서 기본 스토리지 엔진으로 사용되며, 다양한 기능을 통해 데이터베이스 운영을 효율적으로 관리할 수 있다. 주요 구성 요소는 다음과 같다버퍼 풀(Buffer Pool): InnoDB 스토리지 엔진에서 매우 핵심적인 부분. 디스크..

tech/database 2024.09.15

AWS Elasticache vs MemoryDB 비교

elasticache 와 memorydb의 가장 두드러지는 차이는 데이터 쓰기시 memorydb 는 transaction log 기록 후 응답을 전송하고, elasticache for redis는 그렇지 않다는것이다. 이 차이로 인해서 가격, 쓰기성능, 장애발생시 데이터유실가능성(내구성) 면에서 차이가 발생하게 된다. 엘라스티캐시는 특수한 경우에 데이터가 유실될수있고 데이터의 완전한 내구성을 보장하지 않는다. 이 이유는 위에서 언급한 레디스 자체가 노드간 데이터복제를 통해 싱크 할때 비동기방식만 제공하기때문이다. 프라이머리가 다운될때 아직 리플리카로 전달되지않은 데이터가 있는 경우엔 그대로 데이터유실이 된다. 메모리디비에서는 별도의 트랜잭션로그를 기록하는 저널로그공간을 별도로 관리한다. 여기에 기록이되면..

tech/database 2024.05.31

AWS Elasticache(redis) 내부동작 정리

Overview 새로운 서비스에 AWS Elasticache 를 캐시 데이터베이스로 사용할 예정이어서, Redis와 Elasticache 운영에 필요한 내용들을 정리하려 한다. 레디스 Deployment Architecture 레디스 아키텍처 레디스의 아키텍처는 4가지 타입으로 구분될 수 있다. 싱글 노드 High Avaliability(HA 구성) primary node, secondary node Redis Sentinel 2번으로인해 SPF를 방지할 수 있지만, instance down을 감지하지 못하면 의미가 없다. sentinel은 지속적으로 instance가 healthy한지 모니터링하고 발견되면 spinning up하는 역할을 하며, 이외에도 primary 가 다운되면 쿼럼에 기반한 합의알고..

tech/database 2024.03.31

apache lucene 내부구조

개요 아파치 루신은 open-source, high-performance, scalable DB 엔진이다. elasticsearch, solr등의 오픈소스 프로젝트들이 루신을 엔진으로 사용하고있다. 특징 1. inverted index 데이터구조를 사용한 인덱싱 구조 사용 2. 데이터 저장 구조가 log-structured 이다. 즉, disk의 도큐먼트 정보 혹은 인덱스 정보가 inplace로 수정되지 않는다. 인덱스를 예로 들면, 인덱스는 여러 세그먼트(immutable, append only)로 구성되고 새로운 segment들이 계속적으로 생성되고 과거의 segment들은 merge를 통해 합쳐져서(compaction이라고 함) 전체 segment 갯수가 일정이하로 유지되는 식의 구조이다 위 1번의..

tech/database 2023.10.22