The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Data::Chronicle::Reader - Provides reading from 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 details about distribution, caching, database structure and ... from 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.

There are three important methods this module provides:

set

Given a category, name and value stores the JSONified value in Redis and PostgreSQL database under "category::name" group and also stores current system time as the timestamp for the data (Which can be used for future retrieval if we want to get data as of a specific time). Note that the value MUST be either hash-ref or array-ref.

get

Given a category and name returns the latest version of the data according to current Redis cache

get_for

Given a category, name and timestamp returns version of data under "category::name" as of the given date (using a DB lookup).

Example

 my $d = get_some_log_data();

 my $chronicle_w = Data::Chronicle::Writer->new(
    cache_writer => $writer,
    db_handle    => $dbh);

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

 my $chronicle_r2 = Data::Chronicle::Reader->new(
    cache_reader => $hash_ref);

 #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);

cache_reader

cahce_reader can be an object which has `get` method used to fetch data. or it can be a plain hash-ref.

my $data = get("category1", "name1")

Query for the latest data under "category1::name1" from the cache reader. Will return `undef` if the data does not exist.

my $data = get_for("category1", "name1", 1447401505)

Query Pg archive for the data under "category1::name1" at or exactly before the given epoch/Date::Utility.

my $data = get_for_period("category1", "name1", 1447401505, 1447401900)

Query Pg historical data and return records whose date is between given period.

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::Reader

You can also look for information at:

ACKNOWLEDGEMENTS