[개발이야기#028] 내가 해보고 싶은 것 - 자동 보팅 프로그램 SQLite vs DuckDB [postingcuration]

in #kr7 days ago

안녕하세요 가야태자 @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의 특징과 주요 기능

  1. 열 기반 스토리지(컬럼 스토어):

    • DuckDB는 열 기반 데이터 저장 구조를 사용합니다. 이는 행 기반 스토리지보다 데이터 압축에 효과적이며, 대량의 데이터를 조작하거나 특정 열만 필요한 데이터 분석 작업을 수행할 때 성능이 뛰어납니다.
    • 컬럼 단위로 데이터가 저장되므로, 분석 쿼리 수행 시 필요한 열만 메모리에 로드되어 작업이 더 빠르게 진행됩니다.
  2. 인메모리(In-Memory) 분석:

    • DuckDB는 데이터를 메모리에 로드하여 처리하는 것을 기본 원칙으로 합니다. 인메모리 처리를 통해 데이터 로딩 및 쿼리 실행이 매우 빠르게 동작하며, 분석 작업에 최적화되어 있습니다.
    • 단, 파일로 영구 저장할 수도 있어 데이터가 휘발되지 않도록 안전하게 관리할 수 있습니다.
  3. 강력한 SQL 지원:

    • SQL 구문을 완전히 지원하며, 복잡한 쿼리, 조인, 윈도우 함수, 집계 등을 쉽게 사용할 수 있습니다.
    • 데이터 과학자나 분석가들이 익숙한 SQL을 사용해 복잡한 분석을 수행할 수 있으며, 데이터 프레임 형태의 데이터를 SQL로 간편하게 조작할 수 있습니다.
  4. 다양한 데이터 소스 및 파일 형식 지원:

    • DuckDB는 CSV, Parquet, JSON 등 여러 파일 형식을 직접 로딩하고 쿼리할 수 있습니다.
    • 데이터베이스에 데이터를 넣지 않고도 파일을 SQL 쿼리로 직접 조회할 수 있는 기능을 제공합니다.
  5. Pandas 및 R과의 호환성:

    • DuckDB는 Python의 Pandas 라이브러리 및 R의 data.frame과도 호환됩니다. 따라서 기존의 데이터 프레임을 DuckDB로 가져오거나, DuckDB의 쿼리 결과를 데이터 프레임으로 쉽게 변환할 수 있습니다.
    • 데이터 과학 생태계에서 편리하게 사용할 수 있도록 설계되어 데이터 분석 파이프라인에 쉽게 통합됩니다.
  6. 다중 쓰기 및 동시성 지원:

    • DuckDB는 다중 쓰기 및 동시성 처리를 위한 기능을 지원합니다. 여러 스레드나 프로세스에서 데이터를 동시에 읽고 쓰는 작업을 효율적으로 수행할 수 있도록 설계되었습니다.
    • 이는 SQLite와 달리 다중 사용자 환경에서도 원활한 동시 작업이 가능하다는 장점이 있습니다.
  7. 컴팩트하고 가벼운 구조:

    • DuckDB는 가볍고 빠르게 동작하며, 다른 DBMS에 비해 설정이나 복잡한 인프라 없이 간편하게 사용할 수 있습니다.
    • 설치와 실행이 간단하며, SQLite와 같이 단일 바이너리 파일로 배포됩니다.
  8. 트랜잭션 지원 (ACID):

    • DuckDB는 트랜잭션을 지원하며, ACID(Atomicity, Consistency, Isolation, Durability) 속성을 유지합니다. 이를 통해 데이터베이스의 일관성을 보장하며 안전하게 데이터 변경 작업을 수행할 수 있습니다.
  9. 멀티코어 처리 최적화:

    • DuckDB는 CPU의 멀티코어를 활용할 수 있도록 최적화되어 있어 병렬 처리를 효과적으로 수행할 수 있습니다.
    • 이는 대량의 데이터셋을 분석할 때 빠른 쿼리 수행과 고성능 처리를 가능하게 합니다.

오늘의 결론

제가 필요한 부분은 DuckDB에 다 있네요 ^^

DuckDB를 사용해서 자동 보팅 프로그램을 작성하기가 우선 이번 포스팅큐레이션의 주제 입니다.

#postingcuration

2차 포스팅큐레이션이 준비 되고 있습니다.

즐거운 주말 되십시오

감사합니다.



Posted through the ECblog app (https://blog.etain.club)

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

정리를 너무 잘해주셨네요. 감사합니다.

DuckDB라는 좋은 데이터베이스가 있었네요 ^^
앞으로 잘 사용해야겠습니다.

DuckDB 가 SQLlite와 비교해서 가장 큰 차이점은,
(1) 다중 쓰기가 된다 (2) 열기반 스토리지 방식을 사용한다.
그래서 자동보팅 프로젝트에서는 DuckDB를 사용한다. 잘 이해한건지.. ㅋ
감사합니다! ^^

잘 이해 하셨습니다. 저기서 하나더 DuckDB가 인공지능(머신러닝)하고 친화 적이라네요 ^^