Amazon-DynamoDB-Simple
view release on metacpan or search on metacpan
lib/Amazon/DynamoDB/Simple.pm view on Meta::CPAN
package Amazon::DynamoDB::Simple;
use Amazon::DynamoDB;
use Carp qw/cluck confess carp croak/;
use DDP;
use JSON::XS;
use Moo;
use Try::Tiny;
our $VERSION="0.01";
=head1 NAME
Amazon::DynamoDB::Simple - Simple to use and highly available
=head1 SYNOPSIS
use Amazon::DynamoDB::Simple;
my $table = Amazon::DynamoDB::Simple->new(
table => $table, # required
primary_key => $primary_key, # required
access_key_id => ..., # default: $ENV{AWS_ACCESS_KEY_ID};
secret_access_key => ..., # default: $ENV{AWS_SECRET_ACCESS_KEY};
);
# returns a hash
my %item = $table->get($key);
# create or update an item
$table->put(%item);
# mark item as deleted
$table->delete($key);
# returns a hash representing the whole table as key value pairs
$table->items();
# returns all the keys in the table
$table->keys();
# delete $old_key, create $new_key
$table->rename($old_key, $new_key);
# sync data between AWS regions using the 'last_updated' field to select
# the newest data. This method will permanently delete any items marked as
# 'deleted'.
$table->sync_regions();
# This sets the value of the hosts attribute. The value shown is the
# default value. You must use exactly two hosts for stuff to work atm.
# Sorry.
$table->hosts([qw/
dynamodb.us-east-1.amazonaws.com
dynamodb.us-west-1.amazonaws.com
/]);
=head1 DESCRIPTION
DynamoDB is a simple key value store. A Amazon::DynamoDB::Simple object
represents a single table in DynamoDB.
This module provides a simple UI layer on top of Amazon::DynamoDB. It also
makes your data highly available across exactly 2 AWS regions. In other words
it provides redundancy in case one region goes down. It doesn't do async. It
doesn't (currently) support secondary keys.
Note Amazon::DynamoDB can't handle complex data structures. But this module
can because it serializes yer stuff to JSON if needed.
At the moment you cannot use this module against a single dynamodb server. The
table must exist in 2 regions. I want to make the high availability part
optional in the future. It should not be hard. Patches welcome.
=head1 DATA REDUNDANCY
TODO
=cut
has table => (is => 'rw', required => 1);
has primary_key => (is => 'rw', required => 1);
has dynamodbs => (is => 'lazy');
has hosts => (is => 'rw', lazy => 1, builder => 1);
has access_key_id => (is => 'rw', lazy => 1, builder => 1);
has secret_access_key => (is => 'rw', lazy => 1, builder => 1);
sub _build_access_key_id { $ENV{AWS_ACCESS_KEY_ID} }
sub _build_secret_access_key { $ENV{AWS_SECRET_ACCESS_KEY} }
sub _build_hosts {
return [qw/
dynamodb.us-east-1.amazonaws.com
dynamodb.us-west-1.amazonaws.com
/];
}
sub _build_dynamodbs {
my $self = shift;
my @dynamodbs;
my $hosts = $self->hosts();
for my $host (@$hosts) {
push @dynamodbs,
( run in 0.681 second using v1.01-cache-2.11-cpan-39bf76dae61 )