SQLite Introduction & Feature

정현철·2023년 5월 24일
0

Database Project

목록 보기
6/7
post-thumbnail

Introduction

대표적인 특징은 다음과 같다.
1. Open-source
2. Embedded SQL database engine

  • 후술하겠지만 SQLite는 가볍고 빨라서, 내장이 가능한 데이터베이스이다. 따로 서버에 두고 사용하는 MySQL, RocksDB 등(강의에서는 client-server RDBMS라고 표현함)과 여기서 차이점을 보인다.
  1. Single file database
  2. Small, Fast, Self-confined, High-reliability
  3. C-languabe library로 만들어짐

그래서 most widely deployed and used Database Engine이다.

  • 모든 android device, iPhone & IOS device, Mac, Windows 10 machine, firefox & chrome & safari, Dropbox box client, etc에 사용됨.

Features

1. Transactional

  • 설명 전에, Transaction이 정확하게 무엇인가?

Transaction : 읽기와 쓰기를 하나의 논리적 단위로 묶는 방법
이때 이 묶여진 단위는 commit, 혹은 rollback이 보장되어야 한다. commit은 transaction의 결과를 DB에 반영하는 것, 그리고 rollback은 transaciton 이전으로 상태를 돌려버리는 것이라고 보면 될 것이다.

  • SQLite는 transaction에 대해 ACID를 지원한다. 이는 transaction들이 안정적으로 수행된다는 것을 보장하기 위한 성질들을 의미한다. 즉 이를 지원한다는 것은, 안정적인 transaction이 가능하다는 의미라고 볼 수 있다. 사람들이 DB를 쓰는 이유라고도 볼 수 있을 것.
    • Atomic(원자성)
      • 말 그대로 transaction을 "더 쪼갤 수 없는 것"으로 정의해 버린다고 이해하자. 즉, Transaction과 관련된 작업들이 모두 수행되거나, 그렇지 않다면 모두 실행되지 않음을 보장하는 것. 예로, 송금이 성공한다는 것은 송금과 관련된 모든 작업이 정상적으로 수행되었음을 뜻한다. 하지만 실패하였다면, 중간 단계까지 실행하고 실패하는 일은 없어야 한다. 송금처에서 이체되었는데 수신부에 도착하지 않는 일은 나타나면 안 된다는 것이다. 이를 보장하는 것이 Atomic
    • Consistency(일관성)
      • Transaction 이후에도 언제나 일관성 있는 데이터베이스 상태가 유지된다는 것. 즉, 해당 데이터베이스 제약 조건은 어떠한 Transaction이 실행되더라도 반드시 지켜진다는 뜻. 예로 잔고가 있는 계좌만 존재한다는 제약이 있다면, 모두 인출해버리는 transaction 같은 것은 일어나면 안 된다.
    • Isolated(고립성)
      • Concurrent operation이 일어나는 경우에도 항상 currect result를 보장한다는 것. 동시에 실행되는 transaction은 서로 격리된다. 그래서 하나의 transaction이 다른 transaction을 절대 방해할 수 없음을 보장하는 것. 예로, 은행의 관리자가 이체 작업을 하는 도중에 이체 당사자의 계좌를 조회하는 query를 보내면, 이에 따른 transaction은 실행되지 않는다.
    • Durability(지속성)
      • 성공적으로 commit된 데이터는, 이 변경사항이 디스크에 flush되기 전에 시스템 장애가 발생하였다고 하더라도, 무조건 commit을 보장해야 한다는 것. 보통 log를 사용해서 복구하는 과정으로 구현한다고 생각하면 될 것 같다.

SQLite는,

  • Logging(journal file)로 AtomicDurability를 보장한다.
  • Locking(file-based locking)으로 Isolated를 보장한다.
  • keep the data consistent and check the rule로 Consistency를 보장한다.

SQL로 다 컨트롤할 수 있다.

  • table, index, triggers, and views
  • multi-column index
  • Partial index
  • Clustered index
  • subquery
  • etc
    다 지원한다.

3. Single-file & Cross-Platform Database

  • SQLite가 사용할 DB는 single file에 정의된다. 그래서 DB백업은 .db파일을 통으로 cp뜨면 완료된다.
  • Backward compatibility
    • v3.0.0 이후 버전들에서 파일 포맷이 변경되는 버전 업이 몇 번 있었다고 하는데, 그럼에도 불구하고 v3.0.0 이후로는 모두 하위 호환성이 지원된다.
  • Portable across 32-bit and 64 bit / Big-endian and Little-endian machines / another OSs(android, iOS, Linux, Mac, Solaris, Windows, etc) 이런 환경에 구애받지 않고 다 사용할 수 있다.

4. Zero-configuration & Self-confined

  • Setup process가 필요없다.
    • 일단 install과정이 없고, 셋업도 없고, start, stop, configured하기 위한 서버 프로세스도 없고, 새 database instance를 만들거나 access 할당을 하기 위한 administrator도 없다.
  • Configuration file이 필요없다.
    • 시스템에게 SQLite가 실행 중임을 알리기 위해 따로 수행할 작업이 없으며, 시스템 충돌이나 비정상적인 전원 장애 후 복구를 위한 추가적인 작업도 필요가 없다.
  • Troubleshoot이 없다.
  • Stand-alone이며 (external library의) dependency도 없다.

5. Well-commented source code

  • C-language로 작성되었으며, API를 사용하기 쉽다.
  • 600KB under의 아주 small code footprint로 구성되며, 100% branch test coverage를 만족한다.
    • Test coverage란 얼마나 테스트가 충분한지를 나타내는 것. Branch coverage라고 하면 모든 조건 분기를 완벽하게 다 테스트했다는 의미로 이해하면 될 것 같다.

0개의 댓글