NAME

Data::Chronicle::Writer - Provides writing to an efficient data storage for volatile and time-based data

DESCRIPTION

This module contains helper methods which can be used to store and retrieve information on an efficient storage with below properties:

Timeliness

It is assumed that data to be stored are time-based meaning they change over time and the latest version is most important for us.

Efficient

The module uses Redis cache to provide efficient data storage and retrieval.

Persistent

In addition to caching every incoming data, it is also stored in PostgreSQL for future retrieval.

Transparent

This modules hides all the internal details including distribution, caching, and database structure from the developer. He only needs to call a method to save data and another method to retrieve it. All the underlying complexities are handled by the module.

EXAMPLE

my $d = get_some_log_data();

my $chronicle_w = Data::Chronicle::Writer->new(
   cache_writer   => $writer,
   dbic           => $dbic,
   ttl            => 86400,
   publish_on_set => 1);

my $chronicle_r = Data::Chronicle::Reader->new(
   cache_reader => $reader,
   dbic         => $dbic);


#store data into Chronicle - each time we call `set` it will also store
#a copy of the data for historical data retrieval
$chronicle_w->set("log_files", "syslog", $d);

#retrieve latest data stored for syslog under log_files category
my $dt = $chronicle_r->get("log_files", "syslog");

#find historical data for `syslog` at given point in time
my $some_old_data = $chronicle_r->get_for("log_files", "syslog", $epoch1);

METHODS

cache_writer

cache_writer should be an instance of RedisDB.

dbic

dbic should be an instance of DBIx::Connector.

ttl

If a TTL value is provided when constructing the instance, this will be used as the expiry time for the data.

Expiry time is not currently recorded in the PostgreSQL database backend - it is only used for the cache layer.

This represents the seconds until expiry, and default is undef, meaning that keys will not expire.

publish_on_set

Will invoke

$cache_writer->publish("$category::$name1", $value);

if set to true. This is useful, if to provide redis or postgres notificaitons on new data.

Default value: 0 (false)

set

Example:

$chronicle_writer->set("category1", "name1", $value1);

Store a piece of data "value1" under key "category1::name1" in Pg and Redis. Will publish "category1::name1" in Redis if publish_on_set is true.

mset

Example:

$chronicle_writer->mset([["category1", "name1", $value1], ["category2, "name2", $value2], ...]);

Store a piece of data "value1" under key "category1::name1", "category2::name2", etc in Pg and Redis. Will publish "category1::name1", "category2::name2", etc in Redis if publish_on_set is true.

AUTHOR

Binary.com, <support at binary.com>

BUGS

Please report any bugs or feature requests to bug-data-chronicle at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-Chronicle. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc Data::Chronicle::Writer

You can also look for information at:

ACKNOWLEDGEMENTS