Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133569
  • 博文数量: 69
  • 博客积分: 2895
  • 博客等级: 少校
  • 技术积分: 710
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-03 18:05
文章分类

全部博文(69)

文章存档

2010年(69)

我的朋友

分类:

2010-09-11 16:09:30

(一)依赖:cassandra.jar

             libthrift.jar

(二)连接:

    //该方法将返回一个Cassandra.Client实例,该实例包含和server端指定节点会话的API

  1.  
  2.      public Cassandra.Client getClient()
  3.     {
  4.         //192.168.0.169为想连接到的某个节点的ip,9160为端口
  5.  
  6.         TSocket socket = new TSocket("192.168.0.169"9160);
  7.  
  8.         TTransport transport_ = socket;
  9.  
  10.         TBinaryProtocol binaryProtocol = new TBinaryProtocol(transport_,falsefalse);
  11.         Cassandra.Client cassandraClient = newCassandra.Client(binaryProtocol);
  12.  
  13.         try
  14.         {
  15.             transport_.open();
  16.         }
  17.         catch( e)
  18.         {
  19.             // Should move this to Log4J as well probably…
  20.             .err.println("Exception " + e.getMessage());          
  21.             e.printStackTrace();
  22.         }
  23.       
  24.         return cassandraClient;
  25.      
  26.     }
  27.  

(三)API

1)该方法向key的指定path插入一个数据,另外想要对key某指定path的数据进行修改也使用这个方法

   代码中的cli是一个Cassandra.Client实例

  1.  
  2.      public void test_insert()
  3.     {
  4.         try {
  5.              tableName = "Table1";
  6.              key = "testkey";
  7.              columnFamily = "Standard1";
  8.              columnName = "testColumn";
  9.              value = "testValue";
  10.  
  11.             //对数据进行定位
  12.              path = columnFamily+":"+columnName;
  13.             //向cassandra中插入一条数据
  14.             cli.insert(tableName,key,path,value.getBytes(),.currentTimeMillis(),true);
  15.         } catch (InvalidRequestException e) {
  16.             e.printStackTrace();
  17.         } catch (TException e) {
  18.             e.printStackTrace();
  19.         } catch (UnavailableException e) {
  20.             e.printStackTrace();
  21.         }
  22.     }
  23.  

2)该方法试用Cql语句的方式发送请求,有一个问题就是当请求的参数或不正确的时候,方法不会报错,只是返回为空;

   但是在语法出现错误的时候还是会有InvalidRequestException抛出,提示Unresolved compilation problems

   代码中的cli是一个Cassandra.Client实例

  1.  
  2.    public void test_excuteQuery()
  3.     {
  4.         try {
  5.             cli.executeQuery("set Table1.Standard1['testKey2']['testColumn']=’testValue2′");
  6.             CqlResult_t crt = cli.executeQuery("get Table1.Standard1['testKey2']");
  7.             List> rs = crt.getResultSet();
  8.             //遍历显示所有column_t中的内容
  9.             if(rs != null){
  10.                 for(int i = 0 ; i < rs.size() ; i++){
  11.                     Map map = rs.get(i);
  12.                     for( key : map.keySet()){
  13.                         .out.println(key+" : "+map.get(key));
  14.                     }
  15.                 }
  16.             }else{
  17.                 .out.println("result set is null");
  18.             }
  19.         } catch (TException e) {
  20.             e.printStackTrace();
  21.         }
  22.     }
  23.  

3)根据path信息获取一个column

   path是一个定位信息,standard column family是两层 super column family是三层

   superColumnFamily:superColumn:standardColumn。

  1.  
  2.    public void test_get_column()
  3.     {
  4.          tableName = "Table1";
  5.          key = "testKey2";
  6.          columnFamily = "Standard1";
  7.          column = "testColumn";
  8.          path = columnFamily+":"+column;
  9.         try {
  10.             column_t cmt = cli.get_column(tableName, key, path);
  11.             //以下两个是等价的
  12.             .out.println(cmt.getColumnName());
  13.             .out.println(cmt.getFieldValue(1));
  14.             //以下两个是等价的
  15.             .out.println(new (cmt.getValue(),"UTF-8"));
  16.             .out.println(new ((byte[])cmt.getFieldValue(2),"UTF-8"));
  17.             //以下两个是等价的
  18.             .out.println(cmt.getTimestamp());
  19.             .out.println(cmt.getFieldValue(3));
  20.           
  21.         } catch (InvalidRequestException e) {
  22.             e.printStackTrace();
  23.         } catch (NotFoundException e) {
  24.             e.printStackTrace();
  25.         } catch (TException e) {
  26.             e.printStackTrace();
  27.         } catch ( e) {
  28.             e.printStackTrace();
  29.         }
  30.     }

4)

    //术语解释:每个key都对应一个Row的信息这个Row的信息又按照columnFamliy 分成了很多slice

    //给定table,key和columnFamily的信息,
    //此方法将返回,该key在当前columnFamily的slice中有都少个column元素
    //该例子中key:”testKey2″在columnFamily:”Standard1″中的slice有几个column元素

  1.  
  2.     public void test_get_column_count()
  3.     {
  4.          tableName = "Table1";
  5.          keyName = "testKey2";
  6.          columnFamily = "Standard1";
  7.         try {
  8.             .out.println(cli.get_column_count(tableName, keyName, columnFamily));
  9.         } catch (InvalidRequestException e) {
  10.             e.printStackTrace();
  11.         } catch (TException e) {
  12.             e.printStackTrace();
  13.         }
  14.     }
  15.  

5) //暂不确定

    //根据给定的时间点,取出以后的对应给定key的一组columns
    //但是好像在时间上有延迟,这个不确定

  1.  
  2.     public void test_get_columns_since()
  3.     {
  4.          tableName = "Table1";
  5.          keyName = "testKey2";
  6.          columnFamily = "Standard1";
  7.          sinceTime = .currentTimeMillis()-5000*1000;//取当前时间之前120秒以内的
  8.         try {
  9.             List cmts = cli.get_columns_since(tableName , keyName , columnFamily , sinceTime);
  10.             .out.println("cmts size : "+cmts.size());
  11.         } catch (InvalidRequestException e) {
  12.             e.printStackTrace();
  13.         } catch (NotFoundException e) {
  14.             e.printStackTrace();
  15.         } catch (TException e) {
  16.             e.printStackTrace();
  17.         } catch ( e) {
  18.             e.printStackTrace();
  19.         }
  20.     }
  21.  


阅读(831) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~