728x90
728x90
[Redis] Data Types 정리
Tech/데이터베이스2025. 2. 9. 21:03[Redis] Data Types 정리

https://redis.io/docs/latest/develop/data-types레디스는 캐싱부터 큐잉, 이벤트 처리 등의 비즈니스 문제를 다양하게 해결할 수 있도록 다양한 데이터 타입들을 제공한다.과금 모델인 Enterprise 명령어는 제외했으며, 포스팅 외의 공식문서를 참조하고 싶다면 각 링크들을 참조하자.[자료 구조]                [명령어]    String512MB 미만의 일반적인 문자열을 저장할 수 있다. 직렬화된 객체나 이진 배열을 포함한다.바이너리 데이터를 포함할 수 있어 이미지 저장이 가능하다.HTML Fragments, 페이지 등의 캐싱에 유용하다.증감 연산을 사용할 수 있다. (INCR, DECR)SETEX, PSETEX, SETNX는 2.6.12버전부터 deprec..

[MySQL] Lost Update와 Write Skew
Tech/데이터베이스2024. 12. 12. 11:07[MySQL] Lost Update와 Write Skew

서론트랜잭션의 격리 수준 포스팅에서 다루지 않았던 이상현상 중 Lost Update와 Write Skew같은 일관되지 않은 쓰기 결과를 반환하는 데이터 부정합 문제가 있다. PostegraSQL에서는 격리 수준을 REPEATABLE READ로 설정하는 것만으로도 쓰기 결과를 올바르게 보장할 수 있다. 하지만 MySQL의 MVCC(Multi Version Concurrency Control)은 일관된 읽기(Consistence Read)를 지원하지만 위와 같은 데이터 업데이트의 부정합 문제를 REPEATABLE READ의 격리 수준 만으로는 해결할 수 없다.  아래 그림은 MySQL에서 REPEATABLE READ 격리 수준을 사용했을 때 Lost Update가 발생하는 상황이다. 고객 A가 10,000원..

[데이터베이스] MVCC(다중 버전 동시성 제어 - Multi Version Concurrency Control)
Tech/데이터베이스2024. 12. 2. 22:47[데이터베이스] MVCC(다중 버전 동시성 제어 - Multi Version Concurrency Control)

동시성 제어(Concurrency Control)DBMS에서 동시성 제어는 동시에 데이터에 접근하는 여러 사용자, 즉 여러 트랜잭션의 상호작용에서 트랜잭션의 isolation을 보장하고 일관성과 무결성을 유지할 수 있도록 하는 목적으로 사용되는 기술이다.  이러한 동시성 제어를 하는 대표적인 방식 중 가장 대표적인 Lock을 간단하게 알아보자.  공유 잠금(읽기 잠금, shared lock)이나 배타적 잠금(쓰기 잠금, exclusive lock)을 통해 Lock을 획득한 후 트랜잭션 내부의 작업을 수행하는 방식이다. (read로도 쓰기 잠금을 획득할 수 있다)  다른 트랜잭션은 이전 트랜잭션에서 Lock을 반환해야 작업이 수행이 가능하다는 의미이다.    이는 곧 SERIALIZABLE하다는 의미이며,..

[MySQL] 트랜잭션 격리수준(isolation level)과 이상현상 (with 테스트 코드)
Tech/데이터베이스2024. 11. 27. 14:56[MySQL] 트랜잭션 격리수준(isolation level)과 이상현상 (with 테스트 코드)

기억에 오래남고 이해하기 쉽게 현재 조직의 웨딩 도메인의 적립금을 예시로 간단한 엔터티 설계와 더불어 테스트 코드를 작성하여 각 격리수준과 이에 따른 이상현상을 정리해보았다. 개념들은 MySQL의 공식문서를 활용하여 정리하였고, AUTO_COMMIT은 FALSE를 가정하고 예제들을 작성하였다. (예제에 필요한 기본적인 엔터티와 데이터 세팅은 아래를 참조) CREATE TABLE icash (    no INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,    user_no INT UNSIGNED UNIQUE NOT NULL,    icash INT UNSIGNED DEFAULT 0 NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTA..

[데이터베이스] 인덱스(index) 정리
Tech/데이터베이스2024. 7. 10. 17:41[데이터베이스] 인덱스(index) 정리

인덱스   목차, 색인, 책갈피와 같은 기능을 하는 인덱스는, 데이터베이스 분야에서는 어떤 데이터를 검색할 때 속도를 높여주는 자료 구조로메모리 영역에 생성되는 일종의 책갈피이다.    인덱스 구조보통 Hash, B-Tree, B+Tree가 있다. Hash우리가 알고있는 Key, Value형태의 자료 구조다.해시 함수로 키 값을 해시값으로 변환하고, 이 해시 값을 기반으로 데이터를 빠르게 조회할 수 있다. - O(1)   하지만 이런 해시구조의 특성상 범위 검색에 효율이 떨어진다. 키 값이 조금이라도 변하게 되면 완전히 다른 해시 값을 반환하기 때문이다.범위 검색에서의 부등호 연산을 포함한 범위 조건(BETWEEN, LIKE 등)에는 적합하지 않다.   B-TreeB-Tree는 이진 트리를 확장한 트리 ..

Tech/데이터베이스2023. 3. 16. 06:54[MySQL] 프로시저 (Stored Procedure)

학원 내 모의 프로젝트에서 1. 회원 탈퇴의 경우 일정 기간이 지나면 자동으로 테이블에서 삭제 처리 2. 통계 테이블에 해당 날짜의 자정이되면 자동으로 insert처리 위와 같은 DB 자동화를 구축해 보고 싶었고 강사님께 여쭈어봤더니 CI/CD ?? Jenkins 같은 것들을 학습하면 구현하는 데 도움이 될 거라고 하셨는데 너무 생소한 개념이기도 하고 학습하는데 시간이 다 가서 프로젝트 수행을 못할 것 같아 방법을 찾아보던 중 프로시저를 활용해 MySQL 내에 이벤트를 구현해 간단한 자동화??아닌 자동화를 구현한 적이 있다. 그 때 당시 이해했던 프로시저는 Java의 메서드와 같은 역할을 하는 것인줄 알았다. 함수를 생성하여 이벤트 스케쥴러를 통해 프로시저를 호출했기 때문이다. 지금와서 지난 쿼리를 보니..

[MySQL] 이벤트 생성 - 이벤트 스케쥴러(Event Scheduler)
Tech/데이터베이스2023. 3. 11. 22:13[MySQL] 이벤트 생성 - 이벤트 스케쥴러(Event Scheduler)

학원 내 모의 프로젝트 중에서 간단하게 이벤트를 생성 해 통계 테이블에 자정마다 날짜를 입력 해 줬던 적이 있다. 사용했던 경험이 있기 때문에 내 것으로 만들어보고자 포스팅을 하게 되었다. 이벤트 생성 아래의 코드는 프로젝트 내 통계 테이블 중 방문자 테이블의 첫 insert를 위해 사용했다. (해당 날짜 방문자는 00:00:00으로 초기화 되어있는 해당 일자 테이블에 방문횟수가 +1되는 구조였다) create event visitDaily on schedule every 1 hour starts now() --comment 주석 do insert into VISIT(VISIT_DATE, NUMBER) select date_format(now(), "%Y%m%d"), 0 from dual where no..

Tech/데이터베이스2023. 1. 11. 22:49[MySQL/DB] 서브쿼리(SubQuery)

[ 서브쿼리 (SUBQUERY) ] 다른 쿼리 내부에 포함되어 있는 SELECT문을 말한다. 서브쿼리는 괄호() 로 묶어서 표현한다. 서브쿼리 실행 후 메인쿼리를 실행한다. 서브쿼리는 단일 행 연산자(=, >=)와 다중 행 연산자(IN, NOT IN, ANY, EXISTS 등)들을 사용하여 표현한다. 메인쿼리와 서브쿼리 메인쿼리 = 부모쿼리 = 외부쿼리(outer query) 서브쿼리 = 자식쿼리 = 내부쿼리(inner query) SELECT FROM WHERE 조건식 연산자 (SELECT FROM WHERE); 장점 1. 쿼리의 구조화를 통한 가독성 상승 2. 복잡한 JOIN, UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공 서브쿼리를 사용 가능 한 곳 ​MySQL에서 서브쿼리를 포함할..

728x90
728x90
image