2006년 07월 10일
SQLite
사실 바이오 관련 컴터 노가다 일을 하다 보면 DB 를 사용하지 않을 수가 없는데, 이때 가장 일반적으로 추천되는 것은 MySQL 이겠지만 로컬에서 수행하는 스크립트성의 일을 하는데 과연 MySQL 까지 필요가 있는가 하는 생각이 들 때가 있다. (몇천 건 정도의 데이터에서 쿼리 몇번 던지면 끝나는 일) 그리고 클라이언트에서 돌아가는 어플리케이션에 DB 기능을 넣고 싶을 때라면 어떻게 하겠는가.
그럴 때 가장 유용한 것으로는 SQLite 와 같은 파일 DB 시스템일 것이다. 즉, 복잡한 DB 설정이나 관리는 필요없이 Database 하나를 파일 하나로, 그럼에도 불구하고 상당수의 SQL 문법을 사용할 수 있다. (Transaction도 지원한다) 지원되지 않는 문법은 여기. 보면 대부분의 SQL 문법을 사용할 수 있다는 것을 알 수 있을 것이다.
그리고 속도가 상당히 빠르다. 물론 데이터셋의 크기나 SQL 의 복잡도에 따라서 크게 차이가 날 수 있는 부분이긴 하지만, 적어도 위의 벤치마킹에서는 MySQL이나 PostgreSQL에 비해서 그리 떨어지지 않으며, 일부의 경우에는 훨씬 빠르다.
크기는? 커맨드라인 인터페이스까지 합쳐서 212kb. C Library 이므로 C 로 프로그래밍하는 경우에는 바이너리에 링크시켜 버리는 것도 가능하다.
보통 Perl 의 DBD 관련 모듈은 MySQL 등의 DBMS의 '드라이버' 인데, SQLite 모듈인 DBD::SQLite 의 경우에는 아예 SQLite 자체가 들어 있다. 즉, 아무런 설정 없이 CPAN에서 DBD::SQLite 모듈 설치만으로 완전한 관계형 DB 를 사용할 수 있다는 것.
Python의 경우에는 pysqlite 라는 것이 존재한다.
설치 (Perl)
1. cpan 실행.
2. install DBD::SQLite
이게 끝이다. 아무 설정도 필요없다. 너무 허무한가?
Python에서의 설치는 여기를 참조.
사용을 위해서는 DBI 모듈을 임포트하고, 표준적인 DBI 접속을 통해서 SQLite db에 연결한다. 여기서 지정되는 dbname은 SQLite 에서 억세스할 수 있는 파일 하나라고 생각하면 된다. MySQL 과 같은 DBMS 가 아닌 관계로 user나 password는 존재하지 않는다는 것만 주의하면 된다. table 의 경우에는 sqlite 사이트의 command line interface 를 이용해도 되지만 그냥 db 에 접속하고, create table 로 table 만 추가해 주면 된다.
그 다음에는 표준적인 Perl 의 DBI Interface 에 따라서 SQL Query 를 수행할 수 있다.
이런 식으로 펄의 표준적인 DBI Interface 에 따라서 Query 를 호출하여 사용하면 된다. 어차피 이쪽 분야에서 많이 하는 일은 텍스트 형식의 데이터 파싱이 될 것인데, 이러한 결과들을 파싱한 후, DB로 저장해 둔 후, 필요할 때마다 별도의 스크립트로 데이터를 꺼내서 사용하면 된다. 데이터 백업이나 이동을 위해서는 별도로 DB 를 DUMP 할 필요도 없이, SQLite 에서 생성된 파일 하나가 Database 라고 간주하고 사용하면 된다. 정말 간단하지 않은가?
비주얼한 Browser 가 필요한 경우에는 SQLite Browser 도 이용 가능하다.
잠시 생각해 본 활용 예는 다음과 같은 것들을 생각해 볼 수 있을 것이다.
- BLAST Parser 등의 데이터 저장용 : 일단 Parsing을 한 후 file DB 에 넣어두면 이 내용을 SQL Query 로 불러낼 수 있으므로 매우 편리함. 특히 두 가지 이상의 프로그램을 파싱한 결과를 DB에서 합칠 경우에 매우 유용하다.
- Standalone Application 개발시의 내장 DB로의 활용 : Java나 .NET 개발시에도 Wrapper 를 이용하여 사용 가능. DB 자체가 파일로 저장되고 OpenOffice 에서도 억세스 가능하므로 데이터 백업 및 교환도 용이하다. SQLite 를 이용하여 만든 스크립트와 DB 파일 하나만으로 설치가 끝난다. 물론 DBD::SQLite 모듈 설치는 해야겠지만서도.
Web Application이나 서버구축 수준의 일이 아닌, 워크스테이션 용도의 스크립트 레벨에서의 DB 이용에서는 이보다 간단한 방법은 존재하지 않을 것이라고 생각된다. 특히 DB를 다루어 본 적이 없는 초보자 입장에서 DB 의 맛을 보는 데는 이보다 용이한 방법은 없을 것이다.
또한 Java 나 .NET Wrapper 도 구할 수 있으므로, DB 기능을 갖춘 데스크탑 어플리케이션 제작에도 매우 유용하다. 200kb 미만의 작은 라이브러리 하나로 거의 완전한 기능을 갖춘 관계형 DB 를 구축할 수 있다는 것은 꽤 쓸만하지 않은가? 듣자하니 OS X 에서는 Tiger 부터 SQLite 가 표준적으로 장착되고 있다고 한다.
사실 이런 작업을 위해서 오라클 DB 를 쓴다고 해서 말릴 사람은 없지만 (-.-;; ) 호미로 막을 수 있는 일을 가래로 막을 필요는 없는 일이다. 간단하게 할 수 있는 일은 최대한 간단하게 하면 되는 것이 바로 이쪽 계통 일의 비결이 아닐까.
그럴 때 가장 유용한 것으로는 SQLite 와 같은 파일 DB 시스템일 것이다. 즉, 복잡한 DB 설정이나 관리는 필요없이 Database 하나를 파일 하나로, 그럼에도 불구하고 상당수의 SQL 문법을 사용할 수 있다. (Transaction도 지원한다) 지원되지 않는 문법은 여기. 보면 대부분의 SQL 문법을 사용할 수 있다는 것을 알 수 있을 것이다.
그리고 속도가 상당히 빠르다. 물론 데이터셋의 크기나 SQL 의 복잡도에 따라서 크게 차이가 날 수 있는 부분이긴 하지만, 적어도 위의 벤치마킹에서는 MySQL이나 PostgreSQL에 비해서 그리 떨어지지 않으며, 일부의 경우에는 훨씬 빠르다.
크기는? 커맨드라인 인터페이스까지 합쳐서 212kb. C Library 이므로 C 로 프로그래밍하는 경우에는 바이너리에 링크시켜 버리는 것도 가능하다.
보통 Perl 의 DBD 관련 모듈은 MySQL 등의 DBMS의 '드라이버' 인데, SQLite 모듈인 DBD::SQLite 의 경우에는 아예 SQLite 자체가 들어 있다. 즉, 아무런 설정 없이 CPAN에서 DBD::SQLite 모듈 설치만으로 완전한 관계형 DB 를 사용할 수 있다는 것.
Python의 경우에는 pysqlite 라는 것이 존재한다.
설치 (Perl)
1. cpan 실행.
2. install DBD::SQLite
이게 끝이다. 아무 설정도 필요없다. 너무 허무한가?
Python에서의 설치는 여기를 참조.
| use DBI; my $dbh = DBI->connect("dbi:SQLite:dbname=dbfile","",""); |
사용을 위해서는 DBI 모듈을 임포트하고, 표준적인 DBI 접속을 통해서 SQLite db에 연결한다. 여기서 지정되는 dbname은 SQLite 에서 억세스할 수 있는 파일 하나라고 생각하면 된다. MySQL 과 같은 DBMS 가 아닌 관계로 user나 password는 존재하지 않는다는 것만 주의하면 된다. table 의 경우에는 sqlite 사이트의 command line interface 를 이용해도 되지만 그냥 db 에 접속하고, create table 로 table 만 추가해 주면 된다.
그 다음에는 표준적인 Perl 의 DBI Interface 에 따라서 SQL Query 를 수행할 수 있다.
| my $sth = $dbh->prepare ("SELECT blastparsing.gene, blastparsing.query, blastparsing.length, annotation.description FROM blastparsing, annotation WHERE (blastparsing.gene = annotation.gene)"); $sth->execute(); while (my $result=$sth->fetchhashref()) { print "$result->{gene} $result->{query} $result->{length} "; } $sth->finish(); $dbh->disconnect(); |
이런 식으로 펄의 표준적인 DBI Interface 에 따라서 Query 를 호출하여 사용하면 된다. 어차피 이쪽 분야에서 많이 하는 일은 텍스트 형식의 데이터 파싱이 될 것인데, 이러한 결과들을 파싱한 후, DB로 저장해 둔 후, 필요할 때마다 별도의 스크립트로 데이터를 꺼내서 사용하면 된다. 데이터 백업이나 이동을 위해서는 별도로 DB 를 DUMP 할 필요도 없이, SQLite 에서 생성된 파일 하나가 Database 라고 간주하고 사용하면 된다. 정말 간단하지 않은가?
비주얼한 Browser 가 필요한 경우에는 SQLite Browser 도 이용 가능하다.
잠시 생각해 본 활용 예는 다음과 같은 것들을 생각해 볼 수 있을 것이다.
- BLAST Parser 등의 데이터 저장용 : 일단 Parsing을 한 후 file DB 에 넣어두면 이 내용을 SQL Query 로 불러낼 수 있으므로 매우 편리함. 특히 두 가지 이상의 프로그램을 파싱한 결과를 DB에서 합칠 경우에 매우 유용하다.
- Standalone Application 개발시의 내장 DB로의 활용 : Java나 .NET 개발시에도 Wrapper 를 이용하여 사용 가능. DB 자체가 파일로 저장되고 OpenOffice 에서도 억세스 가능하므로 데이터 백업 및 교환도 용이하다. SQLite 를 이용하여 만든 스크립트와 DB 파일 하나만으로 설치가 끝난다. 물론 DBD::SQLite 모듈 설치는 해야겠지만서도.
Web Application이나 서버구축 수준의 일이 아닌, 워크스테이션 용도의 스크립트 레벨에서의 DB 이용에서는 이보다 간단한 방법은 존재하지 않을 것이라고 생각된다. 특히 DB를 다루어 본 적이 없는 초보자 입장에서 DB 의 맛을 보는 데는 이보다 용이한 방법은 없을 것이다.
또한 Java 나 .NET Wrapper 도 구할 수 있으므로, DB 기능을 갖춘 데스크탑 어플리케이션 제작에도 매우 유용하다. 200kb 미만의 작은 라이브러리 하나로 거의 완전한 기능을 갖춘 관계형 DB 를 구축할 수 있다는 것은 꽤 쓸만하지 않은가? 듣자하니 OS X 에서는 Tiger 부터 SQLite 가 표준적으로 장착되고 있다고 한다.
사실 이런 작업을 위해서 오라클 DB 를 쓴다고 해서 말릴 사람은 없지만 (-.-;; ) 호미로 막을 수 있는 일을 가래로 막을 필요는 없는 일이다. 간단하게 할 수 있는 일은 최대한 간단하게 하면 되는 것이 바로 이쪽 계통 일의 비결이 아닐까.
# by | 2006/07/10 02:07 | Bioinformatics/comp. | 트랙백 | 핑백(1) | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
... 제한한다.- DB로의 원격접속은 불필요하다.- 무료로 쓸 수 있어야 한다.1) SQLitehttp://wiki.kldp.org/wiki.php/SQLitehttp://medialab.egloos.com/13663682) Access(mdb)Java와는 궁합이 맞지 않을것 같아서 배제, 솔직히... 안쓰고 싶다.3) Apache Derbyhttp://www.ib ... more