Net::Async::CassandraCQL - use Cassandra databases with IO::Async using CQL
Net::Async::CassandraCQL
use IO::Async::Loop; use Net::Async::CassandraCQL; use Protocol::CassandraCQL qw( CONSISTENCY_QUORUM ); my $loop = IO::Async::Loop->new; my $cass = Net::Async::CassandraCQL->new( host => "localhost", keyspace => "my-keyspace", default_consistency => CONSISTENCY_QUORUM, ); $loop->add( $cass ); $cass->connect->get; my @f; foreach my $number ( 1 .. 100 ) { push @f, $cass->query( "INSERT INTO numbers (v) VALUES $number" ); } Future->needs_all( @f )->get; my $get_stmt = $cass->prepare( "SELECT v FROM numbers" )->get; my ( undef, $result ) = $get_stmt->execute( [] )->get; foreach my $row ( $result->rows_hash ) { say "We have a number " . $row->{v}; }
This module allows use of the CQL3 interface of a Cassandra database. It fully supports asynchronous operation via IO::Async, allowing both direct queries and prepared statements to be managed concurrently, if required. Alternatively, as the interface is entirely based on Future objects, it can be operated synchronously in a blocking fashion by simply awaiting each individual operation by calling the get method.
CQL3
get
It is based on Protocol::CassandraCQL, which more completely documents the behaviours and limits of its ability to communicate with Cassandra.
The following named parameters may be passed to new or configure:
new
configure
The hostname of the Cassandra node to connect to
Optional. The service name or port number to connect to.
Optional. Authentication details to use for PasswordAuthenticator.
PasswordAuthenticator
Optional. If set, a USE keyspace query will be issued as part of the connect method.
USE keyspace
Optional. Default consistency level to use if none is provided to query or execute.
query
execute
Optional. The number of primary node connections to maintain. Defaults to 1 if not specified.
Optional. If set, prefer to pick primary nodes from the given data center, only falling back on others if there are not enough available.
Quotes a string argument suitable for inclusion in an immediate CQL query string.
In general, it is better to use a prepared query and pass the value as an execute parameter though.
Quotes an identifier name suitable for inclusion in a CQL query string.
Connects to the Cassandra node and starts up the connection. The returned Future will yield nothing on success.
Takes the following named arguments:
A host name is required, either as a named argument or as a configured value on the object. If the service name is missing, the default CQL port will be used instead.
Performs a CQL query. On success, the values returned from the Future will depend on the type of query.
For USE queries, the type is keyspace and $result is a string giving the name of the new keyspace.
USE
keyspace
$result
For CREATE, ALTER and DROP queries, the type is schema_change and $result is a 3-element ARRAY reference containing the type of change, the keyspace and the table name.
CREATE
ALTER
DROP
schema_change
For SELECT queries, the type is rows and $result is an instance of Protocol::CassandraCQL::Result containing the returned row data.
SELECT
rows
For other queries, such as INSERT, UPDATE and DELETE, the future returns nothing.
INSERT
UPDATE
DELETE
A shortcut wrapper for query which expects a rows result and returns it directly. Any other result is treated as an error. The returned Future returns a Protocol::CassandraCQL::Result directly
Protocol::CassandraCQL::Result
Prepares a CQL query for later execution. On success, the returned Future yields an instance of a prepared query object (see below).
Query objects stored internally cached by the CQL string; subsequent calls to prepare with the same exact CQL string will yield the same object immediately, saving a roundtrip.
prepare
Executes a previously-prepared statement, given the binding data. On success, the returned Future will yield results of the same form as the query method. $data should contain a list of encoded byte-string values.
$data
Normally this method is not directly required - instead, use the execute method on the query object itself, as this will encode the parameters correctly.
The following wrapper methods all wrap the basic query operation.
A shortcut to a SELECT query on system.schema_keyspaces, which returns a result object listing all the keyspaces.
system.schema_keyspaces
Exact details of the returned columns will depend on the Cassandra version, but the result should at least be keyed by the first column, called keyspace_name.
keyspace_name
my $keyspaces = $result->rowmap_hash( "keyspace_name" )
A shortcut to a SELECT query on system.schema_columnfamilies, which returns a result object listing all the columnfamilies of the given keyspace.
system.schema_columnfamilies
Exact details of the returned columns will depend on the Cassandra version, but the result should at least be keyed by the first column, called columnfamily_name.
columnfamily_name
my $columnfamilies = $result->rowmap_hash( "columnfamily_name" )
A shortcut to a SELECT query on system.schema_columns, which returns a result object listing all the columns of the given columnfamily.
system.schema_columns
Exact details of the returned columns will depend on the Cassandra version, but the result should at least be keyed by the first column, called column_name.
column_name
my $columns = $result->rowmap_hash( "column_name" )
Allow storing multiple Cassandra seed node hostnames for startup.
Allow other load-balancing strategies than roundrobin.
Adjust connected primary nodes when changing primaries parameter.
primaries
Allow backup nodes, for faster connection failover.
Use TOPOLOGY_CHANGE events to keep the nodelist updated.
TOPOLOGY_CHANGE
This code was paid for by
Perceptyx http://www.perceptyx.com/
Shadowcat Systems http://www.shadow.cat
Paul Evans <leonerd@leonerd.org.uk>
To install Net::Async::CassandraCQL, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::Async::CassandraCQL
CPAN shell
perl -MCPAN -e shell install Net::Async::CassandraCQL
For more information on module installation, please visit the detailed CPAN module installation guide.