Perl模块推荐14_DBI 摘要 键值对的数据结构,HASH首当其中,能够非常方便的根据键找到其对应的值。然后hash是存放在内存中的,当键值对超过100000条,不可避免就会出现out of memory。这时数据库就可以充当硬盘版的hash,拜托内存的限制。
hash 版的键值对的查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 use strict;my %hash;while (<DATA>){ if ($_=~/\S+/ ) { } else { next ; } chomp ; my ($key)=$_=~/>(\S+)/ ; my $value=<DATA>; chomp ($value); $hash{$key}=$value; } print $hash{'Gh_A04G0739' },"\n" ;__DATA__ >Gh_A12G2559 ATGGCTACTTTCTTTGGCTATTTTAC >Gh_A12G2554 ATGGCGGGAACTATCCAATCCCTAAT >Gh_A04G0755 ATGGCCTCCGATCAGACCCTTTTTCA >Gh_A04G0739 ATGGAGAAAGCAAAACCTGAAGCACC >Gh_A04G0738 ATGGCGCAGGTTTTAGACGACGCTGA >Gh_A07G1346 ATGGTTCATTGTCTGCCAAAGGTTTC >Gh_A07G1331 ATGGCAGACAAGGATTCTTCAAGGCC >Gh_A07G1334 ATGACGACGCCAACTCGAGATGCAAT >Gh_A07G1335 ATGGCCGCAACTAGATTCCTCTCTCA >Gh_A08G1510 ATGGCTACTGCACCGATAAAGTCTCA >Gh_A08G1433 ATGGGTAAAACACCTACTGGCAAGGA
perl 数据库 DBI 中有多种数据库引擎,包括。这里以SQLite为例进行介绍,
SQLite模块定义的“数据库”是存在于单个文件中的,把单个文件仿真为一个数据库。 SQLite模块定义的“数据库”是存在于单个文件中的,把单个文件仿真为一个数据库。 SQLite定义的数据库里面没有数据类型这个概念。不管你在创建一个表的时候指定的是什么数据类型,以后你可以在其中放入任何类型的数值(包括字符型,数字型,日期型,二进制对象/blob)。。实际上,创建表的时候你甚至可以不指定数据类型。 CREATE TABLE people ( id, name, age); 这和perl非常像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 use strict;use DBI;my @drivers=DBI->available_drivers;my $db='FASTA.db' ;my $dbh=DBI->connect ("DBI:SQLite:$db" ) or die "can't connect FASTA\n" ;print "Opened database successfully\n" ;my $command = qq(CREATE TABLE fasta2016 (ID CHAR(50) PRIMARY KEY NOT NULL, CONTENT TEXT NOT NULL );); my $rv = $dbh->do ($command);if ($rv < 0 ){ print $DBI::errstr; } else { print "Table created successfully\n" ; } $dbh->disconnect();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 use strict;use DBI;my @drivers=DBI->available_drivers;my $db='FASTA.db' ;my $dbh=DBI->connect ("DBI:SQLite:$db" ) or die "can't connect FASTA\n" ;my $sth=$dbh->prepare("INSERT INTO fasta2016(ID,CONTENT) VALUES(?,?)" );my $id=0 ;while (<DATA>){ $id++; print $id,"\n" ; if ($_=~/\S+/ ) { } else { next ; } chomp ; my ($key)=$_=~/>(\S+)/ ; my $value=<DATA>; print "$key\n" ; $sth->execute($key,$value); } $dbh->disconnect(); __DATA__ >Gh_A07G1331 ATGGCAGACAAGGATTCTTCAAGGCC >Gh_A07G1334 ATGACGACGCCAACTCGAGATGCAAT >Gh_A07G1335 ATGGCCGCAACTAGATTCCTCTCTCA >Gh_A08G1510 ATGGCTACTGCACCGATAAAGTCTCA >Gh_A08G1433 ATGGGTAAAACACCTACTGGCAAGGA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 use Data::Dumper;use strict;use DBI;my @drivers=DBI->available_drivers;my $db='FASTA.db' ;my $dbh=DBI->connect ("DBI:SQLite:$db" ) or die "can't connect FASTA\n" ;my $sth;my $id='Gh_A12G2554' ;my @results;$sth=$dbh->prepare("select ID,CONTENT FROM fasta2016 where id = ?;" ) or die "cannot prepare" ; $sth->execute($id); @results=$sth->fetchrow_array(); print "aaa\n" ;print join "\n" ,@results,"AAA\n" ;$dbh->disconnect();
参考博客
gunnerlzx http://blog.chinaunix.net/uid-20459533-id-1944446.html