📚 Databases

📚 Databases

시계열 데이터를 처리하는 InfluxDB에 대해서 알아보자

⚙ 아래는 InfluxDB v2.x 기준으로 설명합니다. v2.x부터 용어 쿼리들이 크게 변경되었기 때문에 v1.x 버전과는 용어적으로 차이가 있을 수 있습니다.influxDB를 알아보기 전 시계열 데이터란?시계열은 일정 기간 동안 수집되고 시간순으로 정렬된 데이터 요소의 모음입니다. 시계열의 주요 특징은 인덱싱되거나 시간 순서대로 나열된다는 것인데 그래서 그래프에 시계열 데이터를 시각화 할 때 중요한 축은 시간이 됩니다.시계열 데이터는 다음과 같은 곳에서 사용될 수 있습니다.기상 예보주식센서 데이터일(월,연)간 구독자서버 자원 모니터링 등등요즘 들어 스마트 팩토리, 빅데이터, 코인, 주식 등이 핫한데 이런 데이터들의 특징은 시간순으로 인덱싱이 중요하고, 대용량 데이터라는 점입니다. 이러한 데이터들을 핸..

📚 Databases/RealMySQL 8.0

8.3 B-Tree 인덱스

인덱싱 알고리즘 중 가장 일반적으로 사용되는 알고리즘. B는 Binary의 약자가 아닌, Balanced의 약자이다. 8.3.1 구조 및 특성 B-Tree의 구조 제일 상단에 있는 루트 노드, 중간에 있는 브랜치 노드, 가장 마지막에 있는 리프 노드가 있다. 리프 노드는 항상 실제 데이터 레코드를 찾아가기 위한 주소값을 가지고 있다. 인덱스들은 모두 정렬이 된 상태로 저장이 되어 있다. 실제 디스크의 저장된 데이터 파일의 레코드는 정렬되어있지 않다. 엄밀히 말하면, InnoDB에서는 레코드가 클러스터되어 저장되기 때문에 기본적으로 PK 순서로 정렬되어 저장된다. 데이터 레코드 구조 (InnoDB) 리프 노드와 데이터 파일의 구조를 자세하게 살펴보자. 데이터 파일에는 결국 PK를 저장하고 있는 B-Tree..

📚 Databases/RealMySQL 8.0

8.1 데이터베이스 인덱스란?

8.1 디스크 읽기 방식 HDD vs SSD 순차 I/O 방식은 사실 SSD가 HDD보다 조금 빠르거나 거의 비슷한 성능을 보인다. 하지만, 랜덤 I/O에서는 대략 5000배 정도 빠르다. 랜덤 I/O, 순차 I/O란? 순차 I/O는 데이터를 디스크에 저장하기 위해 데이터를 모아서 1 번 시스템에게 요청을 한다. 즉, 디스크 헤더를 1 번 움직였다. 랜덤 I/O는 각각의 데이터를 저장할 때마다 시스템에게 요청을 한다. 즉, 디스크 헤더를 n 번 움직였다. 결국, 순차 I/O는 랜덤 I/O보다 거의 3배정도 빠르다. 💡 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정된다고 볼 수 있다. 일반적으로, 쿼리를 튜닝하는 것은 랜덤 I/O를 줄이기 위함이다. 8..

📚 Databases/RealMySQL 8.0

5.4 MySQL의 격리 수준

트랜잭션의 격리 수준(isolation level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 크게 4가지로 나뉜다. READ UNCOMMITED (=DIRTY READ) 거의 사용하지 않는다. READ COMMITED Oracle 같은 DBMS에서 주로 사용 REPEATABLE READ MySQL에서 사용 SERIALIZABLE 동시성이 중요한 데이터베이스에서는 거의 사용되지 않는다. 아래로 내려갈 수록 트랜잭션 간 데이터 격리(고립) 정도가 높아지며, 동시 처리 성능은 낮아진다. 하지만, SERIALIZABLE이 아닌 나머지 3개는 크게 성능의 개선이나 저하는 발생하지 않는다. 5.4.1 READ ..

📚 Databases/RealMySQL 8.0

5.3 InnoDB 스토리지 엔진 잠금

5.3 InnoDB 스토리지 엔진 잠금 InnoDB 스토리지 엔진은 MySQL과 별개로 잠금을 제공한다. 💡 스토리지 엔진 내부에서 레코드 기반의 잠금 방식을 탑재하고 있다. 5.3.1 InnoDB 스토리지 엔진의 잠금 InnoDB 스토리지 엔진은 레코드 기반의 잠금 을 제공하며, 잠금 정보가 상당히 작은 공간으로 관리되기 때문에 *락 에스컬레이션(레코드 락이 페이지 락으로, 또는 테이블 락으로 레벨업되는 경우)되는 경우는 없다. 또한 InnoDB에서는 특징인 레코드와 레코드 사이의 간격을 잠그는 갭(GAP) 락이라는 것이 존재한다. 점선으로 표시된 것은 존재하지 않는 레코드를 뜻한다. 5.3.1.1 레코드 락 레코드 자체만을 잠그는 것을 *레코드 락이라고 한다. 레코드 ? 레코드란 테이블의 한 데이터의..

📚 Databases/RealMySQL 8.0

5.2 MySQL 엔진의 잠금

잠금의 레벨 MySQL 레벨의 잠금 모든 스토리지 엔진에 영향을 미침 테이블 락 외에도 메타데이터 락(테이블 구조 잠금), 네임드 락 등 기능 제공 스토리지 엔진 레벨의 잠금 스토리지 엔진 간 상호 영향 없음 5.2.1 Global Lock(글로벌 락) DML(Data Manipulation Language, 데이터 조작어)란? 정의된 데이터베이스에 입력된 레코드를 조회, 수정, 삭제 등의 역할을 하는 언어 SELECT INSERT UPDATE DELETE DDL(Data Definition Language, 데이터 정의어)란? 데이터베이스를 정의하는 언어 (데이터 전체의 골격을 결정) CREATE ALTER DROP TRUNCATE FLUSH TABLES WITH READ LOCK 명령으로 획득 MyS..