Tie::Queue - Introduction
Tie::Queue - Tie an ARRAY over a TokyTyrant DB ( see http://tokyocabinet.sourceforge.net )
SYNOPSIS
use Tie::Queue;
use Data::Dumper;
## Queue creation
# This queue is not re-initialised at each execution of the script
# the default namespace is 'Tie-Queue'
# and each item are non serialized
tie my @a, 'Tie::Queue', '127.0.0.1', 1978, 0;
# This queue is NOT re-initialised at each execution of the script
# and each item are non serialized
# the namespace is 'second_queue'
tie my @b, 'Tie::Queue', '127.0.0.1', 1978, 1 , 0 , 'second_queue';
## put some data in the queue
for ( 101 .. 110 )
{
push @a, $_;
}
for ( 1001 .. 1005 )
{
push @ab, $_;
}
push @b, 'some text';
push
## show the content of the queue
print Dumper( \@a );
## print the size of the queue
print "size of array=". scalar @a. "\n";
## remove the latest pushed element from the queue ( the newest)
$res1 = pop @a;
print "latest element $res1\n";
print "size of array=". scalar @a. "\n";
print Dumper( \@a );
$res2 = $a[3];
print "element 3 = $res2\n";
## remove the first element from the queue ( the oldest )
$res3 = shift @a;
print "first element $res3\n";
print "size of array=". scalar @a. "\n";
print Dumper( \@a );
if ( exists $a[4] )
{
print "elem 4 exists\n";
}
else
{
print "elem 4 NOT exists\n";
}
if ( exists $a[40] )
{
print "elem 40 exists\n";
}
else
{
print "elem 40 is NOT existing\n";
}
(tied @a)->CLEAR;
print "size of array=". scalar @a. "\n";
########################
# this queue is re-initialised at each execution of the script
# and each item are serialized
# and the name space is 'third_queue_serialized'
tie my @c, 'Tie::Queue', '127.0.0.1', 1978, 1 , 1 , 'third_queue_serialized';
my %test = ( a => 'key_a', b => 'key_B' , c => 3 );
print Dumper(\%test);
push @d , \%test;
my $r = pop @d;
print Dumper($r)
#######################
DESCRIPTION
Tie an ARRAY over a TokyTyrant DB and allow to push, pop shift data;
This module require TokyoTyrant (database and perl module.)
If the serialisation is required, the module Data::Serilizer is also required
The normal ARRAY function present are
push
pop
shift
exists
scalar
storesize ( to allow undef @a)
Specific function
CLEAR
SYNC
REPAIR
The following function are not implemented.
EXTEND
STORE
DELETE
SPLICE
Basic functions
only the queue relevant functions are present
tie
Tie an array over a DB
my $t = tie( my @myarray, "Tie::Queue", '127.0.0.1', 1978, 1 , 1 , 'first_name' , 1 , 0 );
Six optional parameter are allowed
1) the IP where the TokyoTyrant is running ( default 127.0.0.1 )
2) the port on which the TokyoTyrant is listenning ( default 1978 )
3) a flag to delete at start the DB ( default 0 )
4) a flag to serialize/deserialize on the fly the data stored in the DB
5) a namespace to allow more than one queue on the same DB ( default Tie-Queue )
6) a flag to activate or deactivate auto_sync ( default 1 )
7) a flag to prevent undef value to be pushed ( default 0 )
8) a flag to use self-healing feature or reset a queue if the data queue is corrupted ( default 0 )
9) a flag to add some debug info on correctable error ( default 0 )
10) a flag to prevent insertion of duplicate value ( default 0 )
PUSH
Add an element at the end of the array
push @myarray , 45646;
POP
Extract the latest element from the array ( the newest )
my $data = pop @myarray;
SHIFT
Extract the first element from the array ( the oldest )
my $data = shift @myarray;
EXISTS
Test if an element in the array exist
print "element exists\n" if (exists $myarray[5]);
FETCH
Retrieve a specific element from the array
my $data = $myarray[6];
FETCHSIZE
Get the size of the array
my $data = scalar(@myarray);
SYNC
Force a sync of the DB ( not usefull is auto_sync is on)
$t->SYNC;
CLEAR
Delete all element in the array
$t->CLEAR;
DESTROY
Normal destructor call when untied the array
Normaly never called by user
REPAIR
Force a rescan of all elements in the queue and recreate the right indexes
Functions not Implemented
Most of then are not related to a QUEUE
UNSHIFT
Not implemented
EXTEND
Not implemented
STORE
Not implemented
STORESIZE
to resize the array ( this allow a re-initialisation of the array by undef @a )
DELETE
Not implemented
AUTHOR
Fabrice Dulaunoy <fabrice_at_dulaunoy_dot_com>
SEE ALSO
- TokyoTyrant from Mikio Hirabayashi <mikio_at_users_dot_sourceforge_dot_net>
TODO
- make test
LICENSE
Under the GNU GPL2
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public
License as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc., 59 Temple Place,
Suite 330, Boston, MA 02111-1307 USA
Tie::Queue Copyright (C) 2009 DULAUNOY Fabrice
Tie::Queue comes with ABSOLUTELY NO WARRANTY;
for details See: L<http://www.gnu.org/licenses/gpl.html>
This is free software, and you are welcome to redistribute
it under certain conditions;