트랜잭션이란 테이블 갱신을 수행하기 위해 INSERT/DELETE/UPDATE를 사용할 수 있지만, 갱신은 보통 복수의 쿼리를 연속적으로 수행하는 경우가 대부분이다. 또한, 갱신 전의 데이터로 조회를 할 때 이를 포함한 복수 쿼리들을 일관된 형태의 한 덩어리로 다뤄야 한다. 즉, 트랜잭션이란 복수 쿼리들을 한 단위로 묶은 단위이다. ACID 트랜잭션은 다음과 같이 4가지 특성으로 정의되며, 앞글자를 따서 ACID 특성이라고 한다. Atomicity(원자성) Consistency(일관성) Isolation(고립성 또는 격리성) Durability(지속성) Atomicity(원자성) 원자성이란 데이터 변경을 수반하는 일련의 데이터 조작이 전부 성공할지 전부 실패할지를 보증하는 구조이다. 예를 들어, 서울에서..
데이터베이스 첫걸음을 읽으며 HA(High Availability)를 위한 데이터베이스 아키텍처에 대한 내용을 정리해 보았습니다. 데이터베이스에 예기치 못한 문제가 발생하여 시스템이 정지된다면 관련 서비스 전체가 마비될 수 있습니다. 따라서 데이터베이스는 견고하게 유지되어야 하며, 다중화를 고려해야 합니다. DB 서버의 다중화 - 클러스터링 DB 서버와 저장소의 관계 웹 서버나 애플리케이션 서버는 데이터를 일시적으로 보존하는 반면에 데이터베이스는 대량의 데이터를 영구적으로 보존해야 하고, 매체에 필요한 요건이 높아 전용의 외부 저장소를 사용함 따라서 DB 서버의 아키텍처는 저장소와 묶어서 생각 DB 서버는 영속 계층의 사명으로 다중화 문제를 어렵게 한다. 항상 갱신되는 데이터 사이에서 다중화를 유지하면서..
MongoDB의 데이터를 페이징 하기 위해 skip, limit을 사용하고 있었는데, 어느새부터 데이터를 가져오는데 수 초이상의 지연이 발생하였습니다. 문제점: skip, limit collection.find().skip(pageSize*(pageNum-1)).limit(pageSize);위 방법은 MongoDB에서 지원하는 일반적인 페이징 방식이지만, 컬렉션 내에 도큐멘트 수가 방대하다면 효율적이지 못한 방법입니다. MongoDB에서 skip과 limit을 이용한 페이징 방식의 원리는 전체 데이터를 읽은 뒤, 처음부터 지정된 오프셋까지 찾아 떠납니다. 만약 도큐멘트 수가 1억 건이고 skip이 2천만이면, 첫 번째 문서부터 2천만번째까지 탐색을 하는 것이지요. 따라서 문서가 많아질 수록 성능 저하가 ..
InfluxDB에서 자주 사용되는 용어를 정리한다. Aggregation InfluxQL(InfluxDB Query Language)의 함수 중 하나로, 포인트 셋 전체에 걸쳐 집계된 값을 반환. Batch 데이터 포인트들의 집합. 포인트들의 배치는 write endpoints에 대한 단일 HTTP 요청에 의해 데이터베이스에 제출된다. InfluxDB API를 사용하여 데이터를 저장할 때 HTTP 오버헤드를 줄이면 성능이 대폭 향상될 수 있다. 배치의 크기가 더 작거나 커도 InfluxDB는 잘 동작하겠지만, 배치의 크기는 5000~10000 포인트로 권장하고 있다. Bucket 버킷은 시계열 데이터가 저장되는 위치이다. Continuous Query (CQ) CQ는 데이터베이스 내에서 자동적이며 주기적..