Changeset 802

Show
Ignore:
Timestamp:
04/12/07 18:12:10 (2 years ago)
Author:
hachi
Message:

Make the name/nameid mapping cache in process. This calms the db access down quite a bit.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/filepaths-20070306/server/lib/MogileFS/Plugin/MetaData.pm

    r774 r802  
    1111use strict; 
    1212use warnings; 
     13 
     14my %name_to_nameid; 
     15my %nameid_to_name; 
    1316 
    1417sub load { 
     
    4447 
    4548    while (my ($nameid, $data) = $sth->fetchrow_array) { 
    46         my ($name) = $dbh->selectrow_array('SELECT name FROM plugin_metadata_names WHERE nameid=?', undef, $nameid); 
    47         die "DBH Error while getting nameid->name mapping: " . $dbh->errstr if $dbh->err; 
     49        my $name = $nameid_to_name{$nameid}; 
     50        unless (exists $nameid_to_name{$nameid}) { 
     51            ($name) = $dbh->selectrow_array('SELECT name FROM plugin_metadata_names WHERE nameid=?', undef, $nameid); 
     52            die "DBH Error while getting nameid->name mapping: " . $dbh->errstr if $dbh->err; 
     53            $nameid_to_name{$nameid} = $name; 
     54            $name_to_nameid{$name} = $nameid; 
     55        } 
    4856        $meta_by_name->{$name} = $data; 
    4957    } 
     
    6371 
    6472    foreach my $name (keys %$meta_by_name) { 
    65         my ($nameid) = $dbh->selectrow_array('SELECT nameid FROM plugin_metadata_names WHERE name=?', undef, $name); 
    66         warn "DBH Error on SELECT: " . $dbh->errstr if $dbh->err; 
     73        my $nameid = $name_to_nameid{$name}; 
     74 
     75        unless (exists $name_to_nameid{$name}) { 
     76            ($nameid) = $dbh->selectrow_array('SELECT nameid FROM plugin_metadata_names WHERE name=?', undef, $name); 
     77            warn "DBH Error on SELECT: " . $dbh->errstr if $dbh->err; 
     78            $nameid_to_name{$nameid} = $name; 
     79            $name_to_nameid{$name} = $nameid; 
     80        } 
    6781 
    6882        if ($inserted && ! $nameid) {