Rose::DBx::Object::Cached::FastMmap - Rose::DB::Object Cache Cache::FastMmap


Rose-DBx-Object-Cached-FastMmap documentation  | view source Contained in the Rose-DBx-Object-Cached-FastMmap distribution.

Index


NAME

Top

Rose::DBx::Object::Cached::FastMmap - Rose::DB::Object Cache Cache::FastMmap

SYNOPSIS

Top

  package Category;

  use Rose::DBx::Object::Cached::FastMmap;
  our @ISA = qw(Rose::DBx::Object::Cached::FastMmap);

  __PACKAGE__->meta->table('categories');

  __PACKAGE__->meta->columns
  (
    id          => { type => 'int', primary_key => 1 },
    name        => { type => 'varchar', length => 255 },
    description => { type => 'text' },
  );

  __PACKAGE__->meta->add_unique_key('name');

  __PACKAGE__->meta->initialize;

  ...

  ## Defaults to default settings of L<Cache::FastMmap>.

  $cat1 = Category->new(id   => 123,
                        name => 'Art');

  $cat1->save or die $category->error;




  $cat2 = Category->new(id => 123);

  # This will load from the cache, not the database
  $cat2->load or die $cat2->error; 

  ...

  ## Set the cache options for all Rose::DB::Object derived objects
  $Rose::DBx::Object::Cached::FastMmap::SETTINGS = {
    root_dir   => '/tmp/global_fastmmap',
  };

  $cat1 = Category->new(id   => 123,
                        name => 'Art')->save;

  ## In another script

  $Rose::DBx::Object::Cached::FastMmap::SETTINGS = {
    root_dir   => '/tmp/global_fastmmap',
  };

  # This will load from the FastMmap cache, not the database
  $cat2 = Category->new(id   => 123,
                        name => 'Art')->load;

  ...

  ## Set cache options for all Category derived objects
  Category->cached_objects_settings(
    root_dir   => '/tmp/global_fastmmap',
  );

  ...




  ## Set cache expire time for all Category objects
  Category->cached_objects_expire_in('5 seconds'); 




DESCRIPTION

Top

This module intends to extend the caching ability in Rose::DB::Object allowing objects to be cached wth Cache::FastMmap. This module was created becaue of speed issues with Rose::DBx::Object::Cached::CHI. Those issues arise do to the overhead that the CHI introduces to caching of objects.

Most of the code is taken straight from Rose::DB::Object::Cached. This does not extend Rose::DB::Object::Cached because function calls and how the cache is accessed needed to be changed thoughout the code.

MAJOR DIFFERENCE from Rose::DB::Object::Cached

Top

All objects derived from a Rose::DBx::Object::Cached::FastMmap class are set and retrieved from FastMmap, therefore 2 objects that are loaded with the same parameters are not the same code reference.

In Rose::DB::Object::Cached
  $cat1 = Category->new(id   => 123,
                          name => 'Art');

  $cat1->save;

  $cat2-> Category->new(id   => 123,
                          name => 'Art');

  $cat2->load;

  print $cat1->name; # prints "Art"

  print $cat2->name; # prints "Art"

  $cat1->name('Blah');

  print $cat2->name; # prints "Blah"

In Rose::DBx::Object::Cached::FastMmap
  $cat1 = Category->new(id   => 123,
                          name => 'Art');

  $cat1->save;

  $cat2-> Category->new(id   => 123,
                          name => 'Art');

  $cat2->load;

  print $cat1->name; # prints "Art"
  print $cat2->name; # prints "Art"

  $cat1->name('Blah');
  print $cat2->name; # prints "Art"




GLOBALS

Top

$SETTINGS

This global is used to set FastMmap settings for all objects derived from Rose::DBx::Object::Cached::FastMmap. Any settings here will override any default settings, but will conceded to settings configured by the class method cached_objects_settings

Example:

$Rose::DBx::Object::Cached::FastMmap::SETTINGS = { root_dir => '/tmp/global_fastmmap', };

CLASS METHODS

Top

Only class methods that do not exist in Rose::DB::Object::Cached are listed here.

cached_objects_settings [PARAMS]

If called with no arguments this will return the current cache settings. PARAMS are any valid options for the Cache::FastMmap constructor.

    Example:

    Category->cached_objects_settings (
        root_dir   => '/tmp/global_fastmmap',
        expires_in    => '15m',
    )




Returns the default FastMmap settings for the class. This method should be implemented by a sub class if custom settings are required.

    package Category;
    use base Rose::DBx::Object::Cached::FastMmap;

    ... 

    sub default_cached_objects_settings (
        return {
            root_dir   => '/tmp/global_fastmmap',
            expires_in    => '15 minutes',
        };
    )







OBJECT METHODS

Top

Only object methods that do not exist in Rose::DB::Object::Cached are listed here.

PRIVATE METHODS

Top

__xrdbopriv_clone

Calls the __xrdbopriv_clone method in Rose::DB::Object::Helpers

Because of the nature of Storable all objects set to cache are set by $object->__xrdbopriv_clone->__xrdbopriv_strip

__xrdbopriv_strip

Calls the __xrdbopriv_strip method in Rose::DB::Object::Helpers

Because of the nature of Storable all objects set to cache are set by $object->__xrdbopriv_clone->__xrdbopriv_strip

There is most likely at better and cheaper way to do this....

TODO

Top

Tests

Currently tests only exist for MySQL. Almost all of these have been copied directly from the tests that exist for Rose::DB::Object.

SUPPORT

Top

Right now you can email kmcgrath@baknet.com.

AUTHOR

Top

    Kevin C. McGrath
    CPAN ID: KMCGRATH
    kmcgrath@baknet.com

COPYRIGHT

Top

SEE ALSO

Top

perl(1).


Rose-DBx-Object-Cached-FastMmap documentation  | view source Contained in the Rose-DBx-Object-Cached-FastMmap distribution.