Giter VIP home page Giter VIP logo

tie-mldbm's Introduction

NAME
    Tie::MLDBM - Multi-Level Storage and Locking Class

SYNOPSIS
     use Tie::MLDBM;

     my $obj = tie my %hash, 'Tie::MLDBM', {
         'Lock'      =>  'File',
         'Serialise' =>  'Storable',
         'Store'     =>  'DB_File'
     } [.. other DBM arguments..] or die $!;

DESCRIPTION
    This module provides the means to store arbitrary perl data, including
    nested references, in a serialised form within persistent data
    back-ends. This module builds upon the storage and locking mechanisms of
    MLDBM and MLDBM::Sync by incorporating a more expandible framework that
    allows for a much wider variety of component modules for serialisation,
    storage and resource locking. Indeed, all storage components of this
    framework exist as a direct IS-A inherited class of their parent storage
    module such that almost any module employing a tied-interface can now
    store multi-level nested data structures and incorporate locking
    synchronisation.

    The Tie::MLDBM framework consists of four components: the interface, the
    locking component, the serialisation component and the storage
    component. The interface is implemented as a TIEHASH by the Tie::MLDBM
    module which in turn depends upon the functions provided by component
    modules. The locking or synchronisation component implements shared and
    exclusive access to the underlying storage component by means of
    semaphores. The serialisation component is that which serialises the
    nested data structure into a flat form ready for storage in the
    underlying storage component. The storage component can be any new or
    existing module which implements a TIEHASH interface to a persistent
    store. All storage modules of this framework inherit directly from the
    storage mechanism which they represent.

INTERFACE
    The interface to the Tie::MLDBM module is intended to be simple and
    impose little in the way of a learning curve in its usage.

    The mandatory first argument of the TIEHASH interface of this module is
    a hash reference which contains configuration parameters for the
    Tie::MLDBM framework. These configuration parameters define the
    interface behaviour and component modules of the Tie::MLDBM interface.

    The following configuration parameters are mandatory:

    Lock
        The Lock parameter defines the Tie::MLDBM::Lock::* component module
        to be employed by the Tie::MLDBM framework for locking and
        synchronisation.

        If left unspecified, this parameter defaults to "Null" which calls
        upon the Tie::MLDBM::Lock::Null module for locking and
        synchronisation - This module fulfills the locking component of the
        Tie::MLDBM framework, without actually implementing any resource
        synchronisation or locking.

        The available locking and synchronisation mechanisms are dictated by
        those modules installed in the Tie::MLDBM::Lock::* namespace.

    Serialise
        The Serialise parameter defines the Tie::MLDBM::Serialise::*
        component module to be employed by the Tie::MLDBM framework for the
        serialisation of nested data structures into flat forms ready for
        persistent storage.

        The available serialisation mechanisms are dictated by those modules
        installed in the Tie::MLDBM::Serialise::* namespace.

    Store
        The Store parameter defines the Tie::MLDBM::Store::* component
        module to be employed by the Tie::MLDBM framework for the persistent
        storage of serialised data.

        The available serialisation mechanisms are dictated by those modules
        installed in the Tie::MLDBM::Store::* namespace.

    In addition to these configuration parameters, component modules may
    require additional configuration parameters to be defined in order to
    change their behaviour. For example, the Tie::MLDBM::Lock::File module
    allows for the filename and directory location of the semaphore file
    employed to be defined via a "Lockfile" configuration argument.

    The remaining arguments to the TIEHASH interface of the Tie::MLDBM
    module are passed directly onto the underlying storage TIEHASH, as
    defined by the "Store" configuration parameter. This arrangement allows
    for any module employing a TIEHASH interface to a persistent store to be
    used by the Tie::MLDBM framework, for the persistent storage of
    serialised data.

EXAMPLES
  Example Using DB_File
    An example of the TIEHASH interface of Tie::MLDBM, employing the DB_File
    TIEHASH interface for persistent storage:

     use Tie::MLDBM;

     tie my %test, 'Tie::MLDBM', {
         'Serialise' =>  'Storable',
         'Store'     =>  'DB_File'
     }, 'testdb.dbm', O_CREAT|O_RDWR, 0640 or die $!;

    The above example creates a persistent store for the hash %test called
    "testdb.dbm" with DB_File in which data is serialised using Storable.

  Example Using DBI
    An example of the TIEHASH interface of Tie::MLDBM, employing the TIEHASH
    interface of Tie::DBI (by means of Tie::MLDBM::Store::DBI for persistent
    storage:

     use Tie::MLDBM;

     tie my %db, 'Tie::MLDBM', {
         'Lock'      =>  'File',
         'Serialise' =>  'Storable',
         'Store'     =>  'DBI'
     }, {
         'db'        =>  "Pg:dbname=@{[ DATABASE ]}",
         'table'     =>  'sessions',
         'key'       =>  'id',
         'user'      =>  USERNAME,
         'password'  =>  PASSWORD,
         'CLOBBER'   =>  0
     } or die $!;

    The above example creates a persistent store for the hash %db which
    employs the "sessions" table of a PostgreSQL database for the storage of
    data serialised by Storable.

WARNINGS
    The addition or alteration of elements to nested data structures is not
    entirely transparent in Perl. As such, in order to store a reference or
    modify an existing reference value within a tied hash, the value must
    first be retrieved and stored in a temporary variable before
    modification. For example, the following will not work:

     $hash{'key'}{'subkey'} = 'value';   #   Will not work

    Instead, this operation should be performed in a two-step process, like
    thus:

     $temp = $hash{'key'};               #   Retrieve element
     $temp->{'subkey'} = 'value';
     $hash{'key'} = $temp;               #   Store element

    This limitation exists because the perl TIEHASH interface currently has
    no support for multidimensional ties.

VERSION
    1.04

AUTHOR
    Rob Casey <[email protected]>

COPYRIGHT
    Copyright 2002 Rob Casey, [email protected]

SEE ALSO
    MLDBM, MLDBM::Sync

tie-mldbm's People

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.