键值对的数据结构,HASH首当其中,能够非常方便的根据键找到其对应的值。然后hash是存放在内存中的,当键值对超过100000条,不可避免就会出现out of memory。这时数据库就可以充当硬盘版的hash,拜托内存的限制。
#!/usr/bin/perl -wuse strict;#contact perlcoder weixinmy %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__
DBI 中有多种数据库引擎,包括。这里以SQLite为例进行介绍,
SQLite模块定义的“数据库”是存在于单个文件中的,把单个文件仿真为一个数据库。
SQLite模块定义的“数据库”是存在于单个文件中的,把单个文件仿真为一个数据库。
SQLite定义的数据库里面没有数据类型这个概念。不管你在创建一个表的时候指定的是什么数据类型,以后你可以在其中放入任何类型的数值(包括字符型,数字型,日期型,二进制对象/blob)。。实际上,创建表的时候你甚至可以不指定数据类型。 CREATE TABLE people ( id, name, age); 这和perl非常像。
#!/usr/bin/perl -wuse strict;use DBI;my @drivers=DBI->available_drivers;#print join("-",@drivers);#[create] and connect a databasemy $db='FASTA.db';my $dbh=DBI->connect("DBI:SQLite:$db") or die "can't connect FASTA\n";print "Opened database successfully\n";#create tablemy $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();
#!/usr/bin/perl -wuse strict;use DBI;my @drivers=DBI->available_drivers;#print join("-",@drivers);#[create] and connect a databasemy $db='FASTA.db';my $dbh=DBI->connect("DBI:SQLite:$db") or die "can't connect FASTA\n";#INSERT Tablemy $sth=$dbh->prepare("INSERT INTO fasta2016(ID,CONTENT)VALUES(?,?)");#open FH,"test.fasta";#open FH,"NBI_Gossypium_hirsutum_v1.1.fasta";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__
#!/usr/bin/perl -wuse Data::Dumper;use strict;use DBI;my @drivers=DBI->available_drivers;#print join("-",@drivers);#[create] and connect a databasemy $db='FASTA.db';my $dbh=DBI->connect("DBI:SQLite:$db") or die "can't connect FASTA\n";my $sth;#$sth=$dbh->prepare("select * FROM fasta2016 ") or die "can not prepare the statement\n";my $id='Gh_A12G2554';#$sth->execute($id);#$sth->execute();my @results;#while(@results=$sth->fetchrow_array()){ print $results[0],"\n";}$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();