CS/데이터베이스
-
CQRS를 곁들인 Materialized ViewCS/데이터베이스 2023. 12. 26. 17:07
개요 데이터베이스에서 원하는 데이터를 제공하기 위해 테이블들을 여러 번 join 했던 경험이 있습니다. 이때 paging 등이 함께 들어가면 쿼리를 작성하기도 복잡해지고, 여러 테이블 join에 대한 성능도 고려해야 합니다. 이때 사내에서 read table과 write table을 분리하는 방안이 적용된 케이스들을 알게 되었고 Materialized View 개념에 대하여 학습해보고자 합니다. Database의 View란? 데이터베이스를 공부하다보면 View라는 개념을 지원합니다. View란 실제로 데이터를 저장하고 있지 않지만 SELECT 쿼리 결과를 가상 테이블로 제공합니다. 테이블 join 결과를 View로 만들어보기 CREATE VIEW employee_department AS SELECT e...
-
Outer Join 주의사항CS/데이터베이스 2023. 12. 6. 00:01
개요 bigQuery를 활용하여 두 테이블을 join 하다가 내 예상과 다른 결과가 나와서 당황했는데 근본적인 원인을 찾아 해결한 내용을 적어보고자 합니다. 시도했던 쿼리 -- 예상한대로 결과가 나오지 않는 쿼리 select * from `myTable1` as C LEFT OUTER JOIN `myTable2`as B on C.user_id = B.user_id WHERE C.partition_dates = '2023-11-20' AND C.탈퇴가_되지_않았으면_None인_필드 = 'None' AND B.user_id is null AND B.partition_dates = '2023-11-20'; B테이블과 C테이블을 비교하여 데이터 정합성을 맞추는 과정을 수행하고 있었습니다. 이때 LEFT OUTE..
-
CQRS 패턴이란?CS/데이터베이스 2023. 11. 9. 00:01
개요CQRS 패턴이란? 왜 CQRS를 사용하는가? CQRS의 구현방법 CQRS와 Event Driven Architecture CQRS 고려사항 CQRS패턴이란?명령(Command)과 질의(Query)의 책임(Responsebilitiy)을 분리(Segregation)한다 라는 뜻의 약자입니다. 쓰기를 위한 데이터 모델(Write Model)과 읽기를 위한 데이터 모델(Read Model)을 분리하는 패턴입니다.보통 쓰기 모델에는 높은 데이터 정합성이 요구되며 정규화된 테이블을 설계하게 되는 경우가 많습니다. Command와 Query를 간단하게 설명할 수 있습니다.Command = 시스템의 상태를 변경하는 작업Query = 시스템의 상태를 조회하는 작업 왜 CQRS를 사용하는가?데이터를 쓰는 빈도보다 ..
-
Deferred Join이란? - 실습편CS/데이터베이스 2023. 11. 1. 00:01
개요 Deferred Join이란?-이론 편에 이어 직접 데이터를 세팅하고 성능이 얼마나 개선되는지 확인하는 실습을 진행해보고자 합니다. Spring Boot를 활용한 50만건의 데이터 세팅 @Component class SettingData( private val memberJpaRepository: MemberJpaRepository, ): ApplicationRunner{ override fun run(args: ApplicationArguments) { repeat(500_000){ memberJpaRepository.save(MemberEntity(name = "test$it")) } } } 어떤 방식으로 데이터를 적재하던 상관없습니다. 쿼리문에 따른 실행계획과 성능을 살펴보기 위해 50만 건의..
-
Deferred Join이란? - 이론편CS/데이터베이스 2023. 10. 28. 00:01
Deferred Join을 활용하면 쿼리 속도를 2배 이상 높일 수 있다고 합니다. Deffered Join이란? deferred는 지연된 연기된 이라는 사전적 의미를 가집니다. pagination을 수행할 때 전체 테이블이 아닌 데이터의 하위 집합에서 pagination을 수행합니다. 이 집합은 subquery에 의해 생성되며 나중에 원래 테이블과 join 됩니다. pagination이 될 때 까지 join 작업이 연기되기 때문에 deffered join이라 불립니다. 전통적인 Pagination SELECT * FROM people ORDER BY birthday, id LIMIT 20 OFFSET 450000; people이라는 테이블이 존재하고 생일, ID별로 정렬된 결과를 표기하고 싶습니다. 이..
-
PostgreSQL 데드락 발생시키기CS/데이터베이스 2023. 8. 23. 00:01
데드락이란? Dead Lock 다른 말로는 교착상태를 뜻합니다. 동일한 자원을 공유하고 있는 두 개 이상의 작업이 자신들의 작업을 수행하기 위해 사용해야 하는 리소스를 서로 미리 선점함으로써 상대방이 자원에 접근하지 못하도록 막습니다. 컴퓨터 사이언스에서 많이 나오는 용어로 데이터베이스에서는 여러 개의 트랜잭션이 실행을 하지 못하고 서로 무한정 기다리는 상태를 말합니다. 조금 더 학문적으로 보면 데드락이 발생하기 위한 조건 4가지가 있습니다. (동시에 성립해야 함) 상호 배제 - 자원은 한 번에 하나씩만 사용 점유 대기 - 자원을 점유하기 위해 대기하는 시간이 존재 비선점 - 자원을 강제로 빼앗을 수 없음 순환대기 - P0은 P1가 점유한 자원을 대기하고, P1은 P0가 점유한 자원을 대기 데이터베이스의..
-
Hard Delete와 Soft DeleteCS/데이터베이스 2023. 7. 17. 00:01
개요 데이터베이스에서 회원탈퇴와 같은 일이 일어났을 때 userStatus를 탈퇴상태로 바꿀 건지, 회원의 정보를 모두 삭제할지 고민하곤 합니다. hard delete와 soft delete에 대해 알아보고, 어떤 장단점이 있는지 알아보고자 합니다. Soft Delete란? 논리적으로만 삭제하는 방법입니다. 사용자가 한때 접근할 수 있었지만 더 이상 접근할 수 없는 데이터로 만들어 사용할 수 없게 만드는 프로세스입니다. 회원상태가 USING(이용 중)이라면 WITHDRAW(탈퇴)로 상태만 변경하여 해당 데이터는 DB에 그대로 남아있게 됩니다. UPDATE 쿼리가 발생합니다. Hard Delete란? 데이터베이스에서 영구적으로 데이터를 삭제하는 일입니다. DELETE 쿼리가 발생합니다. 다양한 관점에서 s..
-
캐시 전략CS/데이터베이스 2023. 7. 10. 00:01
캐시 전략이란? 시스템 아키텍처와 Cache Layer를 구성하면서 캐싱전략에 따라 시스템 구성 및 서비스 성능에 영향을 줄 수 있습니다. 이에 따라 상황에 맞는 캐싱 전략을 세우는 것이 좋습니다. 캐시전략을 잘 세우기 위해서는 다음과 같은것들 잘 파악하고 있으면 좋습니다. 어느 종류의 데이터를 캐시에 저장할지 얼만큼 데이터를 캐시에 저장할지 얼마동안 오래된 데이터를 캐시에서 제거할지 자주 조회되는 데이터인지 결괏값은 자주 변동되는지 어떤 전략들이 존재하고 어떨 때 사용하면 좋은지에 대해 알아보고자 합니다. Cache Aside Aside란 ~곁에라는 뜻입니다. 가장 많이 사용하는 전략이며, 캐시를 곁에 두고 필요할 때만 데이터를 캐시에 로드하는 전략입니다. 처음 사용자가 요청하게 되면, 캐시에는 아무런..