Database
|
데이터베이스(Database)는 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.
데이터베이스의 개념은 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다.
데이터베이스 기술 중 전통적인 RDBMS 기술뿐만 아니라 최근 들어서는 NoSQL 기술, 메모리에서 디스크로 백업되는 Redis, 메모리 캐싱을 지원하는 membase, graph 데이터베이스 등의 새로운 기술 나타나고 있다.
Category
- Database:Constraints - 제약조건에 대한 설명.
- CodingGuidelines:SQL - SQL 스타일 가이드라인.
- Data source name (DSN)
- Flat file database - 텍스트 파일로 하나의 테이블을 저장한 디비의 총칭
- Key–value database (key–value store)
- Mondrian OLAP server
- Apache Druid
- Apache Kylin
- Cubes (OLAP server)
- Apache Pinot (incubating)
- ClickHouse
Tools
- TermDBMS - DB 조회/수정용 TUI
- gobang - 크로스플랫폼 TUI DB관리 도구
- Visidata - 터미널에서 스프레드시트 데이터 다루기
- Debezium - DB의 변경사항을 스트리밍하는 오픈소스
- Slashbase - DB 협업 개발용 웹 IDE 오픈소스
- Beekeeper Studio - 오픈소스 SQL 에디터 및 DB관리자
- DbGate - 오픈소스 크로스플랫폼 (no)SQL DB 클라이언트
- DBeaver - Eclipse 기반 DB 관리 도구
- tbls - CI 친화적 DB문서화 도구
- DrawDB - 온라인 데이터베이스 다이어그램 편집기 오픈소스
- WhoDB - 가볍고 강력한 데이터베이스 관리 도구
Programming
형상 관리
ETC
- SpaceTimeDB - DB와 서버를 하나로 결합
Projects
- 9 offbeat databases worth a look (눈여겨 볼만한 9가지 색다른 데이터베이스)
- Recent database technology that should be on your radar (part 1) (최근의 흥미로운 데이터베이스 기술들)
데이터베이스 프로젝트 목록.
- DuckDB: 임베드 가능한 OLAP DB
- EdgeDB: NoSQL + RDB
- FoundationDB: 애플의 NoSQL DB
- HarperDB: 정형+비정형 데이터를 싱글DB에
- KeyDB: Redis 호환되는 빠른 KeyValue DB
- M3DB: Uber의 메트릭 저장용 분산 시계열 DB
- RediSQL: Redis KeyValue 데이터를 SQL로 쿼리 가능
- RQLite: SQLite를 멀티노드 분산 DB로
- UmbraDB: Postgres를 대체 가능한 인메모리 분석용 DB
- TileDB: 다차원 데이터 분석
- Materialize: 실시간 SQL Streaming DB
- Prisma: 현대적인 DB클라이언트
- Tremor: 비정형 데이터를 위한 이벤트 처리 시스템
- Debezium: DB변경사항(Change Data Capture)을 스트리밍 하는 분산 플랫폼
- QuestDB: 시계열 데이터에 최적화한 빠른 DB
- TimescaleDB: 시계열 DB
- InfluxDB: 시계열 DB
- NoisePage: 자동으로 운영 및 최적화 되는 오픈소스 RDBMS
- HStreamDB: IoT용 실시간 스트리밍 데이터베이스 오픈소스
- Grafana Mimir - 초고속 시계열DB 오픈소스
오프라인용 클라이언트 DB
- Offline First Database Comparison - 오프라인용 클라이언트 DB 비교
- AWS Amplify Datastore
- Firebase Firestore
- PouchDB & CouchDB
- RxDB & GraphQL
- WatermelonDB
Cloud Database Cheat Sheet
AWS,Azure,Google 과 오픈소스/써드파티의 DB 들을 Type에 따라 한개의 테이블로 정리
- Structured
- Relational : RDS, SQL DB, Cloud SQL, Oracle/PostgreSQL/MySQL/SQL Server
- Columnar : Redshift, Synapse Analytics, BigQuery, Snowflake/ClickHouse
- Key Value : DynamoDB, Cosmos DB, BigTable , Redis/Scylla
- In-Memory : ElastiCache, Azure Cache for Redis, MemoryStore, Redis/Memcached
- Wide Column : Keyspaces, Cosmos DB, BigTable, Cassandra/Scylla
- Time Series : Timestream, Time Series Insights, Bigtable/BigQuery, Influx, OpenTSDB
- Immutable Ledger : Quantum Ledger DB, Confidential Ledger, CloudSpanner, HyperLedger Fabric
- Geospatial : Keyspaces, Cosmos DB, BigTable, PostGIS/geomesa
- Graph : Neptune, Cosmos DB, CloudSpanner, OrientDB/Dgraph
- Document : DocumentDB, Cosmos DB, Firestore, MongoDB/Couchbase
- Text Search : OpenSearch, Cognitive Search, CloudSearch, Elastic Search/Elassandra
- Blob : S3, Blob Storage, Cloud Storage, Ceph/OpenIO
용어 정리
자주 혼동하는 내용으로, Entity, Table, Tuple, Column 등의 용어를 정리한다.
파일 시스템 | 데이터베이스 모델링 | 관계형 데이터베이스 |
파일 (file) | 엔티티 (Entity) | 테이블 (table) |
레코드 (record) | 튜플 (Tuple) | 행 (row) |
키 (key) | 유일값 (identifier) | 기본키 (Primary key, unique) |
필드 (field) | 어트리뷰트 (attribute) | 컬럼 (column) |
- Cardinality (카디널리티)
- 중복도가 ‘낮으면’ 카디널리티가 ‘높다’고 표현한다.
- 중복도가 ‘높으면’ 카디널리티가 ‘낮다’고 표현한다.
- 카디널리티는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표이다.
- 샤드 (Shard), 샤딩; Sharding
- DB에서 Shard란, 큰 데이터베이스를 여러 개의 작은 조각으로 나누어 저장하는 방법을 의미합니다.
Data modeling
데이터 모델링(data modeling)이란 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 말하며, 일반적으로 이를 물리적인 데이터베이스 모델로 환원하여 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업을 포함한다. 후자의 의미로 흔히 데이터베이스 모델링으로 불리기도 한다.
Database model
데이터베이스 모델(database model)은 데이터베이스 관리 시스템이 지원하는 공식 언어로 기술된 데이터베이스의 구조나 형식을 말한다. 다시 말해, 데이터베이스 모델은 데이터베이스 관리 시스템과 결합하는 데 쓰이는 데이터 모델의 응용이다.
기본 스키마는 일반적으로 데이터 사전에 저장되어 있다. 이 스키마가 텍스트 질의 언어에 정의되어 있지만 이 용어는 데이터베이스 구조를 그림으로 기술한 것을 나타내는 데 쓰이기도 한다.
Indexing
- Single Field Indexes : 가장 기본적인 인덱스 타입
- Compound Indexes : RDBMS에서 많이 쓰이는 복합 인덱스
- Multikey Indexes : Array에 매칭되는 값이 하나라도 있으면 인덱스에 추가하는 멀티키 인덱스
- Geospatial Indexes and Queries : 위치 기반 인덱스와 쿼리
- Text Indexes : String 컨텐츠에도 인덱싱이 가능
- Hashed Index : BTree 인덱스가 아닌 Hash 타입의 인덱스도 사용 가능
정규화
데이터베이스의 이상현상(Anomaly)을 방지하기 위한 기술이다.
데이터베이스 정규화의 목적은 주로 두 가지입니다.
- 불필요한 데이터(Data Redundancy)를 제거한다. (e.g. 최대한 중복을 제거)
- 데이터 저장을 "논리적으로" 한다.
여기서 말하는 이상 현상은 세 가지가 있는데 간략하게 설명하면 다음과 같다.
- 갱신 이상 ( Modification Anomaly )
- 중복된 데이터 중 일부를 갱신할 때 의도치 않은 데이터가 갱신됨으로써 생기는 데이터의 불일치
- 삽입 이상 ( Insertion Anomaly )
- 새 데이터를 삽입할 때 의도치 않은 데이터가 삽입됨으로써 생기는 데이터의 불일치
- 삭제 이상 ( Deletion Anomaly )
- 데이터를 삭제할 때 의도치 않은 데이터까지 삭제됨으로써 생기는 데이터의 불일치
정규화가 제대로 되지 않은 테이블의 경우 갱신/삽입/삭제 시 다양한 문제점이 발생할 수 있습니다. 이를 테이블의 구성을 논리적으로 변경하여 해결하고자 하는 것이 바로 정규화입니다.
정규화의 법칙(Normalization Rule)은 1차정규화, 2차정규화, 3차정규화, BCNF, 4차정규화, 5차정규화로 나눌 수 있는데, 실무적으로 4차, 5차 정규화까지 하는 경우는 많지 않다고 합니다.
1NF
1차 정규형은 각 로우마다 컬럼의 값이 1개씩만 있어야 합니다.
예를 들면 하나의 텍스트 필드에 "Banana, Apple"
처럼 두 개 이상의 데이터가 존재해선 안된다.
이를 컬럼이 원자값(Atomic Value)를 갖는다고 합니다.
2NF
2차 정규화부터가 본격적인 정규화의 시작이라고 볼 수 있습니다.
2차 정규형은 테이블의 모든 컬럼이 완전 함수적 종속을 만족하는 것입니다.
이게 무슨 말이냐면 기본키중에 특정 컬럼에만 종속된 컬럼(부분적 종속)이 없어야 한다는 것입니다.
3NF
3차 정규형은 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것 입니다.
풀어서 말하자면, 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것입니다.
BCNF
BCNF는 (Boyce and Codd Normal Form) 3차 정규형을 조금 더 강화한 버전으로 볼 수 있습니다.
이는 3차 정규형으로 해결할 수 없는 이상현상을 해결할 수 있습니다.
BCNF란 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형입니다.
2025년을 위한 7개의 데이터베이스
다양한 문제를 해결하기 위해 주목할 가치가 있는 DB 7개를 소개. 이는 "최고의 DB" 목록이 아닌, 새롭고 유용한 관점을 제공하는 도구들. 2025년엔 이들 각 DB에 대해 일주일씩 투자해보길 바람 (7 DBs in 7 Weeks).
- PostgreSQL - 기본 데이터베이스
- SQLite - 로컬-우선 데이터베이스
- DuckDB - 모든 것을 질의할 수 있는 데이터베이스
- ClickHouse - 컬럼형 데이터베이스
- FoundationDB - 레이어드 데이터베이스
- TigerBeetle - 철저하게 정확한 데이터베이스
- CockroachDB - 글로벌 데이터베이스
Bruce Tate 의 "7 Languages in 7 Weeks" 책 제목 처럼 Database 기준으로 작성한듯
Favorite site
- Wikipedia (en) 데이터베이스에 대한 설명
- 아는만큼 보이는 데이터베이스 설계와 구축 (Story 1 ~ Story 12) 1
- 아는만큼 보이는 데이터베이스 설계와 구축 (Story 13 ~ Story 28) 2
- DB Modeling - 정리 잘 된 글 (Crow's Feet)
- A deep dive into NoSQL: A complete list of NoSQL databases
Tools
- Comparison of data modeling tools
- Data Modelling Tools
- Stackoverflow: Open source database design tool
- Eclipse marketplace: Database
- Eclipse marketplace: Database Development
Topic
- [추천] SQLite vs MySQL vs PostgreSQL: A Comparison Of Relational Database Management Systems 3
- Databases in 2024 : 한해 돌아보기 | GeekNews
- 2022년의 데이터베이스들 리뷰 | GeekNews
- 2021년 데이터베이스들 리뷰 | GeekNews
Guide
- You might as well timestamp it - DB에 불리언 대신 타임스탬프를 사용하라. 예컨대
is_published
말고published_at
을 사용하라._at
은 언제 그것을 했는지 정보를 담고 있기 때문이다. 손실은 적고 이득은 크다. - SQLforDevs.com - Next-Level Database Techniques for Developers Ebook - 개발자를 위한 Next-Level Database Techniques [무료 e북 / 50p PDF]
- 잘 알려지지 않은 최신 DB팁들을 기록한, 개발자를 위한 데이터베이스 Cookbook
- Data Manipulation, Querying Data, Schema, Indexes 4개의 섹션
- 필자의 데이터베이스 팁 이메일 뉴스레터 "SQL For Devs" 구독하면 PDF를 이메일로 전송