[개발이야기#028] 내가 해보고 싶은 것 - 자동 보팅 프로그램 SQLite vs DuckDB [postingcuration]
안녕하세요 가야태자 @talkit 입니다.
윈도우에서 간단하게 사용할 수 있는 자동 보팅 프로그램을 작성해 보려고 합니다.
이번에도 Python으로 작성할 예정입니다.
요즘에 한참 Python에 정을 드리고 있네요 ^^
우선 제가 주로 파일형 디비로 사용하던 SQLite가 단점이 있습니다.
SQL Base라서 일반인 분들은 어려울 수 있지만, 저한테는 좋습니다. ^^
여기서 단점은 다중 접속이 안된다네요.
읽기는 다중접속이 되지만, 쓰기가 다중 접속이 안된다고 나와 있습니다.
그래서 새로운 데이터베이스를 후보들을 조금 살펴 봤습니다.
MySQL이나 PostGreSQL처럼 데몬형이 아닐 것이 기본 개념이었습니다.
Firebird Embedded:
Firebird는 다중 접속과 동시에 읽기/쓰기를 지원하는 비교적 안정적인 파일 기반 데이터베이스입니다. Embedded 모드에서 작동할 수 있어 서버 없이 사용할 수 있으며, 동시 쓰기에도 강합니다.
H2 Database:
Java 기반의 경량 파일 데이터베이스로, 동시 접속과 다중 쓰기를 지원하는 모드가 있습니다. MVCC (Multi-Version Concurrency Control) 방식을 사용하여 동시에 여러 사용자가 접근할 수 있도록 설계되었습니다.
LevelDB / RocksDB:
구글의 LevelDB와 페이스북의 RocksDB는 키-값 스토어로서 다중 쓰기 작업에 강합니다. 내부적으로 LSM 트리 (Log-Structured Merge Tree) 구조를 사용하며, 이 구조는 동시 읽기와 쓰기 작업을 효율적으로 수행할 수 있게 도와줍니다. 하지만 이들은 관계형 데이터베이스가 아니기 때문에 트랜잭션이나 복잡한 쿼리가 필요한 경우 사용하기 어렵습니다.
Berkeley DB:
오라클에서 제공하는 키-값 스토어 데이터베이스로서 다중 쓰기와 동시 접근을 지원합니다. 트랜잭션과 동시성 제어 기능이 있어 다양한 환경에서 사용될 수 있습니다.
DuckDB:
DuckDB는 "SQLite for analytics"로 불리며, 동시성 제어가 개선되어 다중 쓰기와 동시 읽기를 지원합니다. 특히 분석 작업에 최적화되어 있습니다.
H2는 일단 자바에서 사용하던 것이었는데 제외 입니다.
SQLite와 비슷하다는 이야기에 %^^
DuckDB를 사용하기로 했습니다.
그래서 DuckDB에 대해서 조금 더 살펴 봤습니다.
DuckDB의 특징과 주요 기능
열 기반 스토리지(컬럼 스토어):
- DuckDB는 열 기반 데이터 저장 구조를 사용합니다. 이는 행 기반 스토리지보다 데이터 압축에 효과적이며, 대량의 데이터를 조작하거나 특정 열만 필요한 데이터 분석 작업을 수행할 때 성능이 뛰어납니다.
- 컬럼 단위로 데이터가 저장되므로, 분석 쿼리 수행 시 필요한 열만 메모리에 로드되어 작업이 더 빠르게 진행됩니다.
인메모리(In-Memory) 분석:
- DuckDB는 데이터를 메모리에 로드하여 처리하는 것을 기본 원칙으로 합니다. 인메모리 처리를 통해 데이터 로딩 및 쿼리 실행이 매우 빠르게 동작하며, 분석 작업에 최적화되어 있습니다.
- 단, 파일로 영구 저장할 수도 있어 데이터가 휘발되지 않도록 안전하게 관리할 수 있습니다.
강력한 SQL 지원:
- SQL 구문을 완전히 지원하며, 복잡한 쿼리, 조인, 윈도우 함수, 집계 등을 쉽게 사용할 수 있습니다.
- 데이터 과학자나 분석가들이 익숙한 SQL을 사용해 복잡한 분석을 수행할 수 있으며, 데이터 프레임 형태의 데이터를 SQL로 간편하게 조작할 수 있습니다.
다양한 데이터 소스 및 파일 형식 지원:
- DuckDB는 CSV, Parquet, JSON 등 여러 파일 형식을 직접 로딩하고 쿼리할 수 있습니다.
- 데이터베이스에 데이터를 넣지 않고도 파일을 SQL 쿼리로 직접 조회할 수 있는 기능을 제공합니다.
Pandas 및 R과의 호환성:
- DuckDB는 Python의
Pandas
라이브러리 및 R의data.frame
과도 호환됩니다. 따라서 기존의 데이터 프레임을 DuckDB로 가져오거나, DuckDB의 쿼리 결과를 데이터 프레임으로 쉽게 변환할 수 있습니다. - 데이터 과학 생태계에서 편리하게 사용할 수 있도록 설계되어 데이터 분석 파이프라인에 쉽게 통합됩니다.
- DuckDB는 Python의
다중 쓰기 및 동시성 지원:
- DuckDB는 다중 쓰기 및 동시성 처리를 위한 기능을 지원합니다. 여러 스레드나 프로세스에서 데이터를 동시에 읽고 쓰는 작업을 효율적으로 수행할 수 있도록 설계되었습니다.
- 이는 SQLite와 달리 다중 사용자 환경에서도 원활한 동시 작업이 가능하다는 장점이 있습니다.
컴팩트하고 가벼운 구조:
- DuckDB는 가볍고 빠르게 동작하며, 다른 DBMS에 비해 설정이나 복잡한 인프라 없이 간편하게 사용할 수 있습니다.
- 설치와 실행이 간단하며, SQLite와 같이 단일 바이너리 파일로 배포됩니다.
트랜잭션 지원 (ACID):
- DuckDB는 트랜잭션을 지원하며,
ACID
(Atomicity, Consistency, Isolation, Durability) 속성을 유지합니다. 이를 통해 데이터베이스의 일관성을 보장하며 안전하게 데이터 변경 작업을 수행할 수 있습니다.
- DuckDB는 트랜잭션을 지원하며,
멀티코어 처리 최적화:
- DuckDB는 CPU의 멀티코어를 활용할 수 있도록 최적화되어 있어 병렬 처리를 효과적으로 수행할 수 있습니다.
- 이는 대량의 데이터셋을 분석할 때 빠른 쿼리 수행과 고성능 처리를 가능하게 합니다.
오늘의 결론
제가 필요한 부분은 DuckDB에 다 있네요 ^^
DuckDB를 사용해서 자동 보팅 프로그램을 작성하기가 우선 이번 포스팅큐레이션의 주제 입니다.
2차 포스팅큐레이션이 준비 되고 있습니다.
즐거운 주말 되십시오
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
정리를 너무 잘해주셨네요. 감사합니다.
DuckDB라는 좋은 데이터베이스가 있었네요 ^^
앞으로 잘 사용해야겠습니다.
DuckDB 가 SQLlite와 비교해서 가장 큰 차이점은,
(1) 다중 쓰기가 된다 (2) 열기반 스토리지 방식을 사용한다.
그래서 자동보팅 프로젝트에서는 DuckDB를 사용한다. 잘 이해한건지.. ㅋ
감사합니다! ^^
잘 이해 하셨습니다. 저기서 하나더 DuckDB가 인공지능(머신러닝)하고 친화 적이라네요 ^^