Cassandra:通过Perl [英] Cassandra: get via Perl

查看:169
本文介绍了Cassandra:通过Perl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Cassandra 1.0.6

Thrift 0.8

Cassandra 1.0.6
Thrift 0.8

我已使用Perl写入了大约120K的值到Cassandra节点。相关的ColumnFamily活动对ValTypeA和ValTypeB有两个索引。如果我通过cassandra-cli访问数据库,我可以输入命令像get activities where ValTypeA = 10;并获取一些数据。

I have written ~120K values into my Cassandra nodes using Perl. The ColumnFamily in question "activities" has two indexes on "ValTypeA" and "ValTypeB". If I access the db via cassandra-cli I can enter commands like "get activities where ValTypeA = 10;" and get some data.

问题是 - >如何将此操作转换为Perl?

The question is -> how do I translate this action into Perl?

推荐答案

FWIW:答案是索引切片。在perl中如下:

FWIW: The answer is an 'indexed slice'. In perl as follows:

#!/usr/bin/perl -w

use strict;
use warnings;

# Change for your environment
use lib '/vol2/users/progs/perl/cassandra_lib';
use lib '/usr/local/src/thrift-0.8.0/lib/perl/lib';
use Cassandra::Cassandra;
use Cassandra::Constants;
use Cassandra::Types;

use Thrift;
use Thrift::BinaryProtocol;
use Thrift::Socket;
use Thrift::FramedTransport;

use Data::Dumper;


# localhost and 9160 are default in storage conf for rpc listener
my $socket = new Thrift::Socket( '10.127.56.42', 9160 );
my $transport = new Thrift::FramedTransport( $socket, 1024, 1024 );
my $protocol = new Thrift::BinaryProtocol( $transport );
my $client = new Cassandra::CassandraClient( $protocol );

eval {
   $transport->open();
   my $keyspace = 'some_data';

   # ColumnParent tells the API the ColumnFamily or SuperColumn we're working on
   my $column_parent     = new Cassandra::ColumnParent({ column_family => "activity" });
   my $consistency_level = Cassandra::ConsistencyLevel::ONE;

   $client->set_keyspace($keyspace);

   my $slice_range = new Cassandra::SliceRange();
   $slice_range->{start} = "";
   $slice_range->{finish} = "";

   my $slice_predicate = new Cassandra::SlicePredicate();
   $slice_predicate->{slice_range} = $slice_range;

   my $index_expression0 = new Cassandra::IndexExpression();
   $index_expression0->{ column_name } = 'ValTypeA';
   $index_expression0->{ op } = Cassandra::IndexOperator::EQ;
   $index_expression0->{ value } = 13;

   my $index_expression1 = new Cassandra::IndexExpression();
   $index_expression1->{ column_name } = 'ValTypeB';
   $index_expression1->{ op } = Cassandra::IndexOperator::EQ;
   $index_expression1->{ value } = '2011-12-26 15:43:34';


   my $index_clause = new Cassandra::IndexClause();
   $index_clause->{ expressions } = [ $index_expression0, $index_expression1 ];
   $index_clause->{ start_key } = '';


   my $result = $client->get_indexed_slices( $column_parent, $index_clause, $slice_predicate, $consistency_level );

print Dumper( $result );   
};

if( $@ )
{
    print Dumper( $@ );
}

这篇关于Cassandra:通过Perl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆