DBIx-NoSQL
view release on metacpan or search on metacpan
lib/DBIx/NoSQL.pm view on Meta::CPAN
package DBIx::NoSQL;
our $AUTHORITY = 'cpan:YANICK';
$DBIx::NoSQL::VERSION = '0.0021';
# ABSTRACT: NoSQL-ish overlay for an SQL database
use strict;
use warnings;
use DBIx::NoSQL::Store;
sub new {
my $class = shift;
return DBIx::NoSQL::Store->new( @_ );
}
sub connect {
my $class = shift;
return DBIx::NoSQL::Store->connect( @_ );
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
DBIx::NoSQL - NoSQL-ish overlay for an SQL database
=head1 VERSION
version 0.0021
=head1 SYNOPSIS
use DBIx::NoSQL;
my $store = DBIx::NoSQL->connect( 'store.sqlite' );
$store->set( 'Artist' => 'Smashing Pumpkins' => {
name => 'Smashing Pumpkins',
genre => 'rock',
website => 'smashingpumpkins.com',
} );
$store->exists( 'Artist' => 'Smashing Pumpkins' ); # 1
$store->set( 'Artist' => 'Tool' => {
name => 'Tool',
genre => 'rock',
} );
$store->search( 'Artist' )->count; # 2
my $artist = $store->get( 'Artist' => 'Smashing Pumpkins' );
# Set up a (searchable) index on the name field
$store->model( 'Artist' )->index( 'name' );
$store->model( 'Artist' )->reindex;
for $artist ( $store->search( 'Artist' )->order_by( 'name DESC' )->all ) {
...
}
$store->model( 'Album' )->index( 'released' => ( isa => 'DateTime' ) );
$store->set( 'Album' => 'Siamese Dream' => {
artist => 'Smashing Pumpkins',
released => DateTime->new( ... ),
} );
my $album = $store->get( 'Album' => 'Siamese Dream' );
my $released = $album->{ released }; # The field is automatically inflated
print $release->strftime( ... );
=head1 DESCRIPTION
DBIx::NoSQL is a layer over DBI that presents a NoSQLish way to store and retrieve data. It does this by using a table called C<__Store__>. Once connected to a database, it will detect if this table is missing and create it if necessary
When writing data to the store, the data (a HASH reference) is first serialized using L<JSON> and then inserted/updated via L<DBIx::Class> to (currently) an SQLite backend
Retrieving data from the store is done by key lookup or by searching an SQL-based index. Once found, the data is deserialized via L<JSON> and returned
The API is fairly sane, though still beta
=head1 USAGE
=head2 $store = DBIx::NoSQL->connect( $path )
( run in 1.606 second using v1.01-cache-2.11-cpan-5b529ec07f3 )