수요일, 11월 14, 2012

MySQL에세 제공하는 스토리지 엔진


Posted at 2009/07/14


출처: afeleia

MySQL 스토리지 엔진에 대해서 좋은 글이 있어서 포스팅~ ^^;; ㅎㅎ
-생명공학으로 학부와 석사를 마쳤는데.. 왜.. MySQL을.. ㅋㅋ

현재 자신이 사용하는 스토리지 엔진을 확인하는 방법

mysql> show table status;
혹은
Information_schema 테이블 확인 (5.0이상부터 지원)


1. MyISAM
MySQL의 기본 스토리지 엔지으로 데이터 저장에 실제적인 제한이 없고 매우 효율적으로 저장한다. Full-Text 인덱스를 지원하며 특정 인덱스에 대해 메모리 캐쉬를 지원한다. 트랜잭션은 미지원/ 테이블 레벨의 락을 지원 잦은 변경및 삭제에는 좋은 성능이 나오지 못하나 데드락 발생은 예방

2. InnoDB
ACID 트랜잭션을 지원하며, MyISAM보다 데이터 저장비율이 낮고, 데이터 로드 속도가 느리다. 특정 데이터와 인덱스에 대해서 메모리 캐쉬를 지원하며 외부티를 지원한다. 데이터 압축이 불가능하고 자동 에러 복구 기능이 있다. 테이블 레벨이 아닌 ROW 레벨의 락을 지원한다.

3. Cluster (NDB)
트랜잭션을 지원하고 모든 데이터와 인덱스가 메모리에 존재하여 매우 빠른 데이터 로드 속도를 자랑하며 PK 사용시 최상의 속도를 나타낸다.

4. Archive
MySQL 5.0부터 새롭게 도입된 엔진으로 자동적으로 데이터 압축을 지원하며 다른 엔진에 비해 80% 저장공간 절약 효과를 자랑한다. 그리고 가장 빠른 데이터 로드 속도 또한 자랑하지만, INSERT와 SELECT만이 가능하다.

5. Federated
MySQL 5.0부터 새롭게 도입된 엔진으로 물리적 데이터베이스에 대한 논리적 데이터베이스를 생성하여 원격 데이터를 컨트롤 할 수 있다. 실행속도는 네트워크 요소에 따라 좌우되면 테이블 정의를 통한 SSL 보안 처리를 한다. 분산 데이터베이스 환경에 사용한다.

Convert a InnoDB table to MyISAM


Posted at 2008/08/25



기본 셋팅으로 테이블을 만들경우

InnoDB로 테이블 생성

InnoDB는 성능보다는 무결점(?)을 우선으로 하기때문에

성능이 MyISAM 타입보다 현저히 떨어진다고 합니다. ㅎㅎ


기존에 InnoDB를 MyISAM으로 바꿔주는 쿼리문.


ALTER TABLE tablename ENGINE = MyISAM;

Delete Command

Posted at 2008/08/25


DELETE

delete from table_name
해당 table의 내용을 삭제

ALTER
alter table table_name {change|add|drop} col_name col_name contents
table의 해당 컬럼을 변환하거나, 추가하거나, 삭제

MySQL UTF-8 셋팅


Posted at 2009/04/23

테스트 환경 Fedora 10 기본으로 깔리는 MySQL 5.0.77

참고 사이트
http://blog.artworker.biz/335
http://towis.net/2689923

vi /etc/my.cnf  [기본으로 설치되는 mysql의 경우]
-존재하는 섹션이 있고 존재하지 않는 섹션이 있다
 섹션이 없으면 추가하면된다.

[client]
default-character-set = utf8

[mysqld]
..생략..
default-character-set = utf8
default-collation=utf8_general_ci
init_connect=set collation_connection = utf8_general_ci
init_connect=set names utf8
character-set-server=utf8
collation-server=utf8_general_ci
character-set-client-handshake=TRUE
..생략..

[mysql]
default-character-set=utf8


파란색으로 Bold처리한 글씨는 새롭게 추가
나머지는 기존에 있는 것이었슴(Fedora 10, mysql 5.0.77의 경우)
-각 값들이 무엇을 하는 것들인지는 저도 잘..

환경 변수 수정 후 mysql 재시작
> /etc/init.d/mysql restart

mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | utf8_general_ci            |
| collation_server         | utf8_general_ci            |
| completion_type          | 0                          |
| concurrent_insert        | 1                          |
| connect_timeout          | 10                         |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)

* MySql에서 데이터베이스 생성 
mysql>CREATE DATABASE {database_name} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

월요일, 11월 12, 2012

대용량 HDD, mount하기

근래 본의아니게
컴퓨터 셋팅을 하게되서
간단한 작업 로그를 정리합니다.

대용량 HDD 포맷 후 mount하기.
Windows가 아니라 Linux 용입니다. ㅋ

요즘 단일 하드로 4TB가 나오는데..;;;
아직 그걸 사용하기에는 가격 매리트가 전혀 없는 관계로
(작업상 당연히 필요하지만 가난한 관계로 필요하다고 걍 살수없습니다.
 많은 랩들이 그러하듯이 ㅎㅎ :) )

anyway,
그래서  4T하드보다 가격 매리트가 아름다운 2T를 선호하고 있습니다.
2T보다 큰 파일들은 어떻게 할것이냐? 그래서 RAID를 사용하고 있지요 :)
그런데 공식적으로 windows나 linux에서 전통적으로 사용하는 파티션 프로그램인
fdisk는 2T 이상의 용량을 하나의 파티션으로 설정 할 경우 비추를 하고 있습니다.
왠지 저한테 묻지 마세요 저도 몰라요 ㅎㅎ

대신 parted라는 프로그램을 제공하고 있습니다.
물론 리눅스에서 GUI용 프로그램으로도 제공하고 있다고 합니다.
저는 CUI만 쓰니깐 몰라요~ :)

일단 fdisk와는 다르게 parted는 설정 후 'w: write'단계가 없습니다.
설정하면 설정되는 겁니다. 실시간으로 중간에 취소하기 없는겁니다.

RAID카드에서 2T이상의 용량으로 RAID를 잡았거나 4T 하드를 달았거나 동일합니다. :)
  #fdisk -l   
명령어를 사용하여 현재 시스템에 어떤 HDD들이 인식되어 있는지 확인합니다.
parted로 파티션을 나누고 포맷할 장치를 확인합니다. :)
예) /dev/sdb 장치를 설정해야 한다고 한다면....

#=======================================
#parted /dev/sdb
(parted) mklabel gpt //대용량 하드 형식인 gpt를 사용해서 라벨링을 하겠다라는 의미
(parted) mkpart //파티션을 만들겠다는 명령어

     partition name [primary]? [Enter] //파티션 이름으로  걍 엔터
     File system type? [ext2]? [Enter] // 어차피 ext2로는 안할것이니 엔터
     Start? //파티션할 장치의 시작을 처음으로 잡을 경우 0을 기입하고 엔터
     End? //파티션의 마지막을 장치의 어느부분으로 할지 설정하는 단계, 전체를 잡을 경우 100%라고 하면 되고, 아닐 경우 원하는 숫자를 GB단위로 기입하고 엔터
(parted)q

#mkfs.ext4 /dev/sdb1

#mount /dev/sdb1 /data
#=======================================
이렇게 하면 /data 위치에 /dev/sdb1 마운트가 되서 사용가능해집니다. :)

금요일, 11월 02, 2012

Warning Warning BAM header...


Warning: BAM header too large File

TopHat - cufflinks 조합으로 RNAseq을 분석하는 분들 중에서
과연 얼마나 접해보셨을까 하는데요..
혹 수백,수천개의 chr을 가진 genome을 분석하시는 분께서는 보셨을지도..

그렇습니다. 아직 genome project가 완벽하게 완료되지않아
chr이 완벽하게 정리되지 않아 그렇게 길지 않은 scaffold로 존재하고 있는 경우
마주할 수 있는 문제입니다.
BAM header 파일이 너무 커서 즐!! 이라고 내뱉는것입죠

samtools view -H input.bam #bam파일 Header만 print하는 명령어

구글링을 통해 얻은 결론
소스코드 수정후 새로 컴파일을 해야한다는 것!
(아놔... precompile된것만 편하게 사용하고 있었는데...
 소스 컴파일한다고 더 제대로 작동한다는 보장도 없는데 말이죠 아놔;;; )

여하튼 cufflink 소스 파일과 필요한 패키지들을 (DNS가 문제인지 외부로 직접은 안붙고
내부만 붙어서 다른 서버에서 다운받아서 복사한 후) 어찌어찌해서 설치 ㅋㅋ
현재까지는 잘 작동있다는 점~
컴파일하는동안 내내 warning이 화면을 도배했다는 점~
이거마저 안되면 난 모르겠다는 점~


cufflinks 패키지 설치시 많은 난관들이 있었지만 구글링을 통해 해결
그 경험을 정리해서 필요한 것과 수정해야 하는것들을 순서대로 다시 정리하자면

1. cmake 설치
 cmake 다운로드
 생각하지도 말고 root로 접속하여
 압축 풀고 폴더 안으로 침투하여
 >./bootstrap
 >make && make install
 을 나비처럼 날아서 타이핑과 엔터를 치면 나도 모르는 사이 설치가 되고 있다는 사실!!


2. boost 설치
 boost 다운로드
 이것 역시 다운로드 후 압축 풀고 root권한으로 접속 하여 설치작업을 진행하는것이 여러모로 건강에 도움이 될 듯 하다.
>cd boost/tools/build/v2/
>./boostrap.sh
>./b2 install
>./bjam #심심하면 이것도 실행을... 아... 기억이.. ㅎㅎ
boost 설치에 대해서는 cufflinks 홈페이지를 참조하는 것도 나쁘지 않는듯
cufflinks 튜토리얼
 root 권한으로 걍 설치하면 BOOST_ROOT path 지정하는게 필요가 있을까 하는 생각도..


3. samtools 설치
 samtools 다운로드
이건 모 설치하는데 크게 어렵지 않는 관계로 걍 본인 계정으로 설치, 그냥 압축 풀고
make 실행시키면 설치될듯합니다.
다만 이후 head파일이나 library파일을 위에서 언급한 tutorial페이지에 나와있는대로
올바른 위치에 복사를 해주어야 정신건강에 좋을듯 하다는 말을 남기면서 다음 단계로 고고씽~!!!


4. eigen 설치
 eigen 다운로드
이것 역시 압축을 해제한 후 계정을 root권한으로 갈아타고
압축 해제한 폴더로 들어가서 서브 디렉토리중 하나인 Eigen 폴더를 통채로
시스템 헤더 파일이 있는 곳으로 복사하면 OK
복사할 디렉토리는 cufflinks 튜토리얼을 참고하시길..


5. cufflinks 설치
 cufflinks 다운로드
마지막으로 대미를 장식할 오늘의 주인공 cufflinks
이것은 꼭 root 권한으로 설치 안해줘도 상관없다.
각자 개인 계정에 압축을 풀고 설치 과정을 시작하면 된다.
단 이 글에서 문제가 되었던 위험 요소를 제거를 하기 위해서 파일하나를 수정할 필요가 있다. :)
>cd cuffinks-2.x.x
>vi src/hits.cpp
MAX_HEADER_LEN = 4 * 1024 * 1024 로 되어 있는 것을
각자 genome 사정에 맞게 수정하면 된다. 
본인의 경우 MAX_HEADER_LEN = 128 * 1024 * 1024
>./configure --prefix=/path/to/cufflinks/install
(위에서 root권한을 사용해서 기본설정으로 설치를 안해주었다면
 --with-boost/--with-eigen/--with-bam 경로를 설정해 주어야 한다.
>make && make install


5단계를 거치고 나서 cufflinks가 설치가 완료되면
이제 새로 컴파일한 실행 파일로 실행하면 일단 warning을 뱉어내지 않으면서
일을 시작할 것이다.

중간에 세그먼트 폴트 에러를 뱉어내면서 죽지 않기를 바랄뿐이다. :)

목요일, 10월 25, 2012

SFF 파일은 어떻게 작업을 해야하나...

아....

딱히 인연이 없던 454 파일을 작업할 기회가 생겨서..
다음과 같이 스크립트를 좀 작성했습니다.

454에서 제공하는 Data analysis를 이용하지 않아서 좀 거시기합니다.
(Homopolymer trimming은 제공하지 못하고 있습니다. ㅎㅎ)

convertsff.py 

SFF파일을 fastq 혹은 fasta, qual 파일로 변환하는 스크립트
fastq로 변환하는 경우 illumina 1.3/1.5+ score로 변환 됩니다.
biopython이 설치되어 있어야 합니다.


SFF_Filter.py

illumina 데이터와는 일단 길이가 차이가 나니.... ㅎㅎ
filtering 스크립트를 간단히 만들었습니다.
cutoff base quality와 cutoff read length는 사용자가 설정 할 수 있게 하였습니다. :)
그리고 N의 포함 정도와 cutoff base quality 포함 정도는 고갱님의 의견을 반영하여
박하지 않게 설정해서 fixed시켜 놨습니다.
맘대로 수정하셔도 무방합니다. :)
다만 더 좋은 옵션이나 방법으로 업데이트 하셨다면 공유를 해주시면 더더욱 감사드리겠습니다.

데이터 변환 및 필터링이 끝나고 나면
QC를 해봐야 겠죠?

좀 간단히 결과를 이쁘게 그려주는게 어디 없을까 하고 있었는데
prinseq라는 프로그램이 있어 잠시 사용해봤습니다.
사용방법은 어렵지 않아요~ :)


Base Quality가 Phred +33인 경우

perl prinseq-lite.pl -verbose -fastq <input.fq> -graph_data <output.gd> -out_good null -out_bad null

Base Quality가 Phred +64인 경우

perl prinseq-lite.pl -verbose -fastq <input.fq> -graph_data <output.gd> -phred64 -out_good null -out_bad null


Quality Check 결과물을 Html로 확인하는 경우
perl prinseq-graphs.pl -i <output.gd> -html_all -o <output_name>

Quality Check 결과물을 png로 확인하는 경우
perl prinseq-graphs.pl -i <output.gd> -png_all -o <output_name>





추후에 시간이되면
Data analysis 프로그램을 설치해서 작업하는 단계나 방법에 대해서 설명하도록 하겠습니다. 그리고 추가적으로 NGS QC toolkit을 사용해서 QC하는 것도..
S대 L모군이 찾아논건데 괜찮아보여서 테스트 해볼까 합니다.
Illumina 외에 454도 지원하고 제일 매력적인건 multi-thread를 지원한다는것!!

모 여하튼...

다음기회에~ :)

화요일, 10월 16, 2012

TopHat을 바라볼때 중요한것

Read Manual!!! 

TopHat manual


사실 알고리듬 모르니...
라고 생각한다면.. 모 어쩔수 없고?? ㅎㅎ :)

하지만 무엇인가 알고 돌리는것과 모르고 자연에 출판된 protocol만 따라 돌리는것에는
많은 차이가 있으니..

T사의 K박사님의 정보로 TopHat 2.0.5를 허벌나게 사용중에 있습니다.
-한달 전만해도 TopHat 2.0.4를 사용중에 있었습니다.
-그 석달 전?? 반년 전 만해도 TopHat 1.0.3?을 사용하고 있었다는...


여하튼...
이번에 TopHat 2.0.5를 사용하면서 기존과 다르게 사용한 옵션이 있으니

--read-realign-edit-dist


그리고 사용안한 옵션도 있으니

-G / --GTF

옵션 이름 만으로도 대충 감들 잡으셨을 테니 옵션에 대한 설명은 패스하고,
왜 -G/--GTF를 사용안하냐?
(엄밀히 말하자면 known gene과 prediction gene의 문제..)
이 옵션을 사용하게 되면 --read-realign-edit-dist를 active시킨 의미가 없어지기 때문입니다.

이번에 --read-realign-edit-dist를 사용하면서 running 시간이 dramatically하게 증가하는 것을 경험했는데, S대 L군의 말로는 자기는 running 시간이 차이가 많이 나지 않는 다는 것!!
둘의 차이가 모였냐하니.. -G옵션을 사용하고 안하고 차이였습니다.

-G 옵션 설명에 gtf 정보를 사용하여 transcript sequence를 뽑아내서 거기에다가만 mapping을 한다는 것;; (역시 지도 교수님은 위대하다는 ㅎㅎ, 본인의 경우 해당 페이지를 몇번을 보고도 그냥 지나쳤었는데.. ㅎㅎ)

여하튼... -G를 사용하고 --read-realign-edit-dist 옵션을 사용하는것도 의미가 있겠지만 -G를 사용하지 않는게 더 좋은 결과를 낼 수 있지 않을까하는 단상을 끄적여 봅니다.

각자 실험하는 개체에 따하 gtf 사용여부를 판단하시면 되고 어떤 결과를 보느냐에 따라
--read-realign-edit-dist를 사용 여부를 결정하시면 됩니다.

제 경우 이게 그냥 자연에 출판된 protocol에 나온 방법보다 좋을것 같다는 생각이 듭니다.
이제 조만간 결과가 나오니 확인해보고 다시 글을 쓰도록 하겠습니다.


그리고 아시다시피 TopHat을 돌렸으면 cufflink도 돌리셔야죠.. ㅎㅎ :)
(아님 말고 ㅎㅎㅎㅎ )


ps. 누누이 말하지만 Human/Mouse는 default와 자연에 출판된 protocol이 甲이 맞는듯 합니다. ㅎㅎ 

목요일, 9월 27, 2012

그렇게 좋은 PacBio에 손이 안가는 이유...

"진정 우리꺼는 여러분들에게 좋으면 좋지
해를 안끼친다는.... "

- PacBio 본사 시니어 연구원느님의 발표


그렇게해도 PacBio는 정이 안간다는 ㅎㅎ

Illumima/ Life Tech.는 "우리거 좋아, 한번 써봐" (라는 우리꺼 안쓰면 니네 좀 후회할껄?)라는 느낌이라면,

PacBio는 "이번 논문에도 나왔듯이 우리꺼쓰면 울트라 캡숑 짱 따봉 좋아요 한번 써보세요" (라는 느낌?)

점심먹으면서 K군과 담소를 나누면서
Microorganism/ Meta genome 분야에서는 454에 비해 확실히 경쟁력이 있는데
(미국에서 1K Fungal genome project에서 PacBio를 사용하고 있다고 합니다.)
그외에는 과연 얼마나 경쟁력이 있는지... 잘 모르겠다는.... ㅎㅎㅎㅎ

그리고 제일 중요한건,

개인적으로 PacBio를 선듯 사용하지 못하는 이유는
비용문제에 대해서 확실한 해결책을 제시하지 못하고 있다는것도 큰 문제인듯..

PacBio를 가장 괴롭히는 것이 Error ratio문제인데
어차피 random error니깐 depth가 많으면 된다는 점~

다만, 다른 시퀀서의 QV를 맞추기위해 그 depth만큼
시퀀싱을 하면 비용 증가로 이어진다는것.

지구상에 재료비에 제한을 두지 않고 풍족하게 사용가능한 랩을 제외하고
사용 가능한 QV에 맞는 depth만큼 시퀀싱할 랩 아니면 ㅎㄷㄷㄷ

모 어차피 시퀀싱 업체에 맡기면 되니깐~  :)

ps. 약간의 글 수정이 있었습니다.
ㄴㅈㅊ에 다니는 지인의 염려가 있어 약간 수정을 하였습니다.
기술적인 부분이 아닌 현실적인 문제인 비용문제에 대해서 언급했으니
모 문제가 있겠냐마는.. ㅎㅎㅎㅎ

목요일, 9월 20, 2012

왜 샘플수가 400이어야 했는가.

왜 300을 하지?? ㅋㅋ

사실 KOGO학회 이전에
창범형님께서 facebook 담벼락에 공지하지 않았다면
그냥 지나갔을 법한 일이었습니다.

사업 취지와 목표, 방법에 대해서 주저리주저리 작성해놓은 문서 보면서
그냥 들었을만하 의구심..
물론 학회장에서 피뽑는다고 해서 신기한 마음에 걍 했지만 서도.. ㅎㅎ :)

샘플수집이 걍 지원자 400명?
2배수 3배수 뽑고 선별이나 무작위 추첨해서 분석하는것도 괜찮을듯한데..
그리고 지역별로도 차이가 날텐데.. 흠..
그리고 400명은 어떻게 나온건데?

궁금한점이 몇가지 들었죠 ㅎㅎㅎㅎ

근데 생각하다보니 이거 구상한 분들도 나랑 똑같이 귀차니즘이구만?
하고 생각을 마무리하게 됐지요 ㅎㅎㅎㅎ

그 이유..

1. 샘플 수집
이런 류의 사업을 진행하때 샘플수집을 어떻게 하는지 잘 모르겠지만..
안내문을 보면 서울에서 400명의 지원자를 받아서 사업을 진행하는 것 같이 보였는데,
이런 사업을 걍 지원자만 가지고 진행하는건지.. 좀 궁금하고..
서울에서만 진행하는건지 좀.... 그랬는데..

서울과 수도권을 포함하면 대한민국 절반이니.. 쿨럭;;;
-이거 완전 서울지상주위자로 몰리겠는데;;; 제가 이번에 시민이되서 그런게 아니라구요 ㅋㅋ

2. 대표성
위에서 언급한 수집 방법과 연결된건데...
Koread reference genome사업인데
대한민국을 대표할수있는 유전체가 될려면...??
이북도 해야하는건거 아닌가? 라는 말이 나올수 있습니다. ㅎㅎ
이북을 포함하지 않은 대표서열을 만든다면
지역적안배를 고려해볼만했을텐데
이북을 포함해서 대표서열을 구축하고자 한다면 굳이 지역적으로 나눠서 할 필요가??
ㅎㅎㅎ 어차피 이북에서 샘플을 못구하는데..
이미 이남에 편향되어 있다고 볼수 있지 않나하는 생각이...
그래서 서울에서만 해도 크게 문제가 되지 않고 대표성에도 문제가 될까하는
생각이 들었습니다.
-물론 서울에서 하니 새터민 분들도 참여를 했냐라고 물으신다면...
 아니요 라고 말씀드릴수있습니다. 확률상 서울이 높다 이거죠;;

 그리고 그분들은 이런 과제 있다는거 모르고 사실겁니다.
 저도 창범형님아니었으면 그분들과 똑같이 모르고 지나갔을테죠 ㅎㅎ
ps. 일단 본 과제에 최소한 하나는 이북 서열입니다. (저요 ㅎㅎ)


3. 샘플 숫자
아... 이건 좀...
제 생각이 맞다면 진짜 안습인데;;;
과제란게 한정된 자원으로 진행하다보니.. 쿨럭..
아시겠죠? ㅋㅋㅋㅋ
이것저것 빼고나니 시퀀싱할 비용으로 할수있는 샘플수가 400명
언저리;;;
이렇게 생각하고 싶진 않지만...ㅋㅋㅋㅋ
그리고 지원자로만 채워질 숫자라면 400도 그리 쉬운숫자가 아니었을겁니다.
이바닥에서 놀고있는 저도 창범형님아니었으면 그냥 지나가고
나중에 저런것도 했었구나 라고 할판이었으니깐요;;;; ㅎㅎㅎㅎ


여하튼... 이번 사업으로
M/D/T사 하나는 NGS로 영업이익은 꽤나 날듯(순이익은 아님..  ㅋ)
시퀀서 규모로는 M사가 유력하긴한데..
그리고  추가적으로 K사도???
아니면 걍 국책과제에 클라우드 리소스 무상 대여;;;;
그냥 그렇다고요 쿨럭;;; ㅎㅎㅎㅎ