2011-12-31 3 views
0

카산드라 1.0.6
드리프트 나는 ~ 내 카산드라에 120K 값이 펄을 사용하여 노드들이 작성한 0.8카산드라 : 펄

를 통해 얻을. 문제의 ColumnFamily "활동"에는 "ValTypeA"및 "ValTypeB"에 대한 두 개의 색인이 있습니다. 내가 cassandra-cli를 통해 db에 접근하면 "ValTypeA = 10; 일부 데이터를 얻으십시오.

질문은 ->이 동작을 어떻게 Perl로 변환합니까?

답변

1

FWIW : 대답은 '색인 된 조각'입니다. 다음과 같이 perl에서 :

#!/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([email protected]) 
{ 
    print Dumper([email protected]); 
} 
+1

이 Perl 라이브러리를 확인해 보는 것이 좋습니다. http://fmgoncalves.github.com/p5-cassandra-simple/. 그런 식으로, 당신은 쓰레기 물건을 전부 쓰지 않아도됩니다. 라이브러리 향상에 도움이되는 경우 보너스 포인트;) –

+0

좋은 링크. 나는 내 혼란의 대부분이이 새로운 모델에 나의 오래된 학교 DB 사고를 적용하려고 단순히 시도하고 있다고 생각한다. "범위 슬라이스"와 "열 슬라이스"및 "인덱스 슬라이스"및 모든 것. – ethrbunny