현재 사내 데이터베이스의 PK가 모두 자연키로 설정되어 있습니다. 데이터베이스 구조를 개선하면서 해당 부분을 대체키로 개선하려고 하는데, 이번에는 PK를 대체키로 설정해야 하는 이유에 대해 살펴보도록 하겠습니다. 아래의 내용은 RealMySQL, 자바 ORM 표준 JPA 프로그래밍, 실무 경험 등을 바탕으로 작성한 내용입니다. 1. PK(기본키)를 대체키로 설정해야 하는 이유 변경 가능성을 제거할 수 있음 성능을 향상시킬 수 있음 테이블 구조와 관련 코드를 간결하게 만들 수 있음 데이터의 무결성을 보장할 수 있음 [ 변경 가능성을 제거할 수 있음 ] 과거에 주민번호를 PK로 사용하는 것이 일반적이던 시절이 있었다. 주민번호는 모든 사람에게 반드시 부여되며(NOT NULL), 유니크하고(UNIQUE), 절..
인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있습니다. 일반적으로 B-Tree 구조가 사용되기 때문에 B-Tree 인덱스를 통해 인덱스의 동작 방식에 대해 살펴보도록 하겠습니다. 1. B-Tree 인덱스와 인덱스가 필요한 이유 [ B-Tree 구조란? ] B-Tree(Balanced Tree) 인덱스에 대해 알기 위해서는 먼저 B-Tree 자료구조를 알아야 한다. B-Tree는 자식 2개 만을 갖는 이진 트리(Binary Tree)를 확장하여 N개의 자식을 가질 수 있도록 고안된 것이다. 그리고 좌우 자식 간의 균형이 맞지 않을 경우에는 매우 비효율적이라, 항상 균형을 맞춘다는 의미에서 균형 트리(Balanced Tree)라고..
이번 내용은 RealMySQL 8.0 책을 보면서 추가적으로 공부하여 정리한 내용입니다. 따라서 MySQL의 InnoDB가 아닌 경우에는 다를 수 있으니 참고 부탁드립니다. 1. 프라이머리 키(PK, Primary Key)와 클러스터링 테이블 [ 프라이머리 키(PK, Primary Key)의 특성 ] 데이터베이스, 특히 MySQL에서 프라이머리 키(PK, Primary Key)는 상당히 신중하게 결정되어야 한다. 그 이유는 PK가 레코드의 저장 위치를 결정하기 때문이다. 그래서 PK는 NOT NULL, 유니크 등의 특성을 갖는다. MySQL은 PK를 기준으로 유사한 값들이 함께 조회되는 경우가 많다는 점에서 착안하여, PK가 유사한 레코드들끼리 묶어서 저장한다. 유사한 것들을 묶는 것을 클러스터링이라고 ..
이번에는 대표적인 TSDB 중 하나인 InfluxDB에 대해 알아보고자 합니다. 1. InfluxDB란? [ InfluxDB란? ] Influx DB란 많은 쓰기 작업과 쿼리 부하를 처리하기 위해 2013년에 Go 언어로 개발된 오픈소스 Time Series Database(시계열 데이터베이스)로써 Tick Stack(Telegraf + InfluxDB + Chronograf + Kapacitor)의 필수 컴포넌트 중 하나이다. Influx DB는 많은 TSDB들(Prometheus, TimescaleDB, Graphite, 등) 중에서 가장 유명하고, 많이 사용되는 데이터베이스이다. Influx DB는 Distributed, Scale horizontally하게 설계되어 새로운 노드만 추가하면 손쉽게 ..
최근에 관계형 데이터베이스(Relational Database)와 NoSQL(비관계형 데이터베이스)에 이어 많은 주목을 받는 시계열 데이터베이스(TSDB, Time Series Database)가 있습니다. 이번에는 TSDB에 대해 간단히 살펴보고자 합니다. 1. 시계열 데이터베이스(TSDB, Time Series Database) 란? [ 시계열 데이터(Time Series Data) 란? ] Time-Stamped Data라고도 불리는 Time Seriese Data(시계열 데이터)는 시간에 따라 저장된 데이터를 의미한다. 시계열 데이터들은 동일한 소스로부터 시간이 지남에 따라 만들어진 데이터들로 구성되므로 시간 경과에 따른 변화를 추적하는데 용이하다. 다소 어렵게 느낄 수 있지만 Time Serie..