2010-03-29 27 views
8

Giả sử kho dữ liệu Cassandra có 20 hàng, với các phím hàng có tên "r1" .. "r20".Tìm nạp các khóa hàng Cassandra

Câu hỏi:

  • Làm thế nào để lấy các phím hàng trong mười hàng đầu tiên (r1 để r10)?

  • Làm cách nào để tìm nạp các khóa hàng của mười hàng tiếp theo (r11 đến r20)?

Tôi đang tìm sự tương tự Cassandra đến:

SELECT row_key FROM table LIMIT 0, 10; 
SELECT row_key FROM table LIMIT 10, 10; 

Trả lời

8

Hãy xem tại địa chỉ:

list<KeySlice> get_range_slices(keyspace, column_parent, predicate, range, consistency_level) 

đâu tuple KeyRange của bạn là (start_key, end_key) == (r1 , r10)

0

Trước hết bạn cần sửa đổi cassandra.yaml trong phiên bản của cassandra1.1.o, nơi bạn nên đặt như sau:

partitioner: org.apache.cassandra.dht.ByteOrderedPartitioner 

Thứ hai, bạn cần xác định như sau:

create keyspace DEMO with placement_strategy = 
    'org.apache.cassandra.locator.SimpleStrategy' and 
    strategy_options = [{replication_factor:1}]; 

use DEMO; 

create column family Users with comparator = AsciiType and 
    key_validation_class = LongType and 
    column_metadata = [ 
    { 
     column_name: aaa, 
     validation_class: BytesType 
    },{ 
     column_name: bbb, 
     validation_class: BytesType 
    },{ 
     column_name: ccc, 
     validation_class: BytesType 
    } 
    ]; 

Cuối cùng, bạn có thể chèn dữ liệu vào cassandra và có thể nhận ra truy vấn nhiều.

1

Dựa trên các thử nghiệm của tôi, không có thứ tự cho các hàng (không giống như cột). CQL 3.0.0 có thể lấy các khóa hàng nhưng không phân biệt (có một cách mà tôi không biết) .Tôi trường hợp của tôi Tôi không biết phạm vi chính của tôi là gì, vì vậy tôi đã cố gắng lấy tất cả các khóa bằng cả Hector và Tiết kiệm và sắp xếp các khóa sau. Thử nghiệm hiệu năng với CQL 3.0.0 cho 100000 cột 200 hàng khoảng 500 mili giây, Hector khoảng 100 và tiết kiệm khoảng 50 mili giây. Phím My Row ở đây là số nguyên. Hector đang sau:

public void qureyRowkeys(){ 
    myCluster = HFactory.getOrCreateCluster(CLUSTER_NAME, "127.0.0.1:9160"); 
    ConfigurableConsistencyLevel ccl = new ConfigurableConsistencyLevel(); 
    ccl.setDefaultReadConsistencyLevel(HConsistencyLevel.ONE); 
    myKeyspace = HFactory.createKeyspace(KEYSPACE_NAME, myCluster, ccl); 
    RangeSlicesQuery<Integer, Composite, String> rangeSlicesQuery = HFactory.createRangeSlicesQuery(myKeyspace, IntegerSerializer.get(), 
      CompositeSerializer.get(), StringSerializer.get()); 
    long start = System.currentTimeMillis(); 
    QueryResult<OrderedRows<Integer, Composite, String>> result = 
     rangeSlicesQuery.setColumnFamily(CF).setKeys(0, -1).setReturnKeysOnly().execute(); 
    OrderedRows<Integer, Composite, String> orderedRows = result.get(); 
    ArrayList<Integer> list = new ArrayList<Integer>(); 
    for(Row<Integer, Composite, String> row: orderedRows){ 
     list.add(row.getKey()); 
    } 

    System.out.println((System.currentTimeMillis()-start)); 
    Collections.sort(list); 
    for(Integer i: list){ 
     System.out.println(i); 
    } 
} 

Đây là mã Thrift:

public void retreiveRows(){ 
    try { 
     transport = new TFramedTransport(new TSocket("localhost", 9160)); 
     TProtocol protocol = new TBinaryProtocol(transport); 
     client = new Cassandra.Client(protocol); 
     transport.open(); 
     client.set_keyspace("prefdb"); 
     ColumnParent columnParent = new ColumnParent("events"); 
     SlicePredicate predicate = new SlicePredicate(); 
     predicate.setSlice_range(new SliceRange(ByteBuffer.wrap(new byte[0]), ByteBuffer.wrap(new byte[0]), false, 1));    
     KeyRange keyRange = new KeyRange(); //Get all keys 
     keyRange.setStart_key(new byte[0]); 
     keyRange.setEnd_key(new byte[0]); 
     long start = System.currentTimeMillis(); 
     List<KeySlice> keySlices = client.get_range_slices(columnParent, predicate, keyRange, ConsistencyLevel.ONE); 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     for (KeySlice ks : keySlices) { 
       list.add(ByteBuffer.wrap(ks.getKey()).getInt()); 
     }  
     Collections.sort(list); 
     System.out.println((System.currentTimeMillis()-start)); 
     for(Integer i: list){ 
      System.out.println(i); 
     } 

     transport.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 

    } 
} 
Các vấn đề liên quan