NAME
Data::RecordStore - Simple and fast record based data store
SYNPOSIS
use Data::RecordStore;
my $data = "TEXT DATA OR BYTES";
my $store = Data::RecordStore->open( $directory );
my $id = $store->stow( $data, $optionalID );
my $val = $store->fetch( $id );
$store->recycle( $id );
my $new_id = $store->next_id;
$store->stow( "MORE DATA", $new_id );
DESCRIPTION
A simple and fast way to store arbitrary text or byte data. It is
written entirely in perl with no non-core dependencies. It is designed
to be both easy to set up and easy to use.
LIMITATIONS
Data::RecordStore is not meant to store huge amounts of data. It will fail
if it tries to create a file size greater than the max allowed by the
filesystem. This limitation will be removed in subsequent versions. This
limitation is most important when working with sets of data that
approach the max file size of the system in question.
This is not written with thread safety in mind, so unexpected behavior
can occur when multiple Data::RecordStore objects open the same directory.
METHODS
open( directory )
Takes a single argument - a directory, and constructs the data store in
it. The directory must be writeable or creatible. If a RecordStore already
exists there, it opens it, otherwise it creates a new one.
entry_count
Returns how many entries are in this store. Recycling ids does _not_
decrement this entry_count.
ensure_entry_count( min_count )
This makes sure there there are at least min_count entries in this
RecordStore. This creates empty records if needed.
next_id
This sets up a new empty record and returns the id for it.
stow( data, optionalID )
This saves the text or byte data to the RecordStore. If an id is passed
in, this saves the data to the record for that id, overwriting what was
there. If an id is not passed in, it creates a new RecordStore.
Returns the id of the record written to.
fetch( id )
Returns the record associated with the ID. If the ID has no record
associated with it, undef is returned.
recycle( $id )
This marks that the record associated with the id may be reused. Calling
this does not decrement the number of entries reported by the RecordStore.
HELPER PACKAGES
Data::RecordStore relies on two helper packages that are useful in their own
right and are documented here.
HELPER PACKAGE
Data::RecordStore::FixedStore
DESCRIPTION
A fixed record store that uses perl pack and unpack templates to store
identically sized sets of data and uses a single file to do so.
SYNOPSIS
my $template = "LII"; # perl pack template. See perl pack/unpack.
my $size; #required if the template does not have a definite size, like
A*
my $store = Data::RecordStore::FixedStore->open( $template, $filename, $size
);
my $new_id = $store->next_id;
$store->put_record( $id, [ 321421424243, 12, 345 ] );
my $more_data = $store->get_record( $other_id );
my $removed_last = $store->pop;
my $last_id = $store->push( $data_at_the_end );
my $entries = $store->entry_count;
if( $entries < $min ) {
$store->ensure_empty_count( $min );
}
$store->emtpy;
$store->unlink_store;
METHODS
open( template, filename, size )
Opens or creates the file given as a fixed record length data store. If
a size is not given, it calculates the size from the template, if it
can. This will die if a zero byte record size is determined.
empty
This empties out the database, setting it to zero records.
ensure_entry_count( count )
Makes sure the data store has at least as many entries as the count
given. This creates empty records if needed to rearch the target record
count.
Returns the number of entries in this store. This is the same as the
size of the file divided by the record size.
get_record( idx )
Returns an arrayref representing the record with the given id. The array
in question is the unpacked template.
next_id
adds an empty record and returns its id, starting with 1
pop
Remove the last record and return it.
push( data )
Add a record to the end of this store. Returns the id assigned to that
record. The data must be a scalar or list reference. If a list
reference, it should conform to the pack template assigned to this
store.
push( idx, data )
Saves the data to the record and the record to the filesystem. The data
must be a scalar or list reference. If a list reference, it should
conform to the pack template assigned to this store.
unlink_store
Removes the file for this record store entirely from the file system.
HELPER PACKAGE
Data::RecordStore::FixedRecycleStore
SYNOPSIS
A subclass Data::RecordStore::FixedRecycleStore. This allows indexes to be
recycled and their record space reclaimed.
my $store = Data::RecordStore::FixedRecycleStore->open( $template,
$filename, $size );
my $id = $store->next_id;
$store->put_record( $id, ["SOMEDATA","FOR","PACK" ] );
my $id2 = $store->next_id; # == 2
$store->recycle( $id );
my $avail_ids = $store->get_recycled_ids; # [ 1 ]
my $id3 = $store->next_id;
$id3 == $id;
METHODS
recycle( $idx )
Recycles the given id and reclaims its space.
get_recycled_ids
Returns a list reference of ids that are available to be reused.
AUTHOR
Eric Wolf coyocanid@gmail.com
Copyright (c) 2015 Eric Wolf. All rights reserved. This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
VERSION
Version 1.0 (October 10, 2015))