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

全部博文(69)

文章存档

2010年(69)

我的朋友

分类:

2010-09-11 16:13:26

16)
//尝试删除一个superColumn节点,和属于该节点的column_t节点
    //测试需要通过path来定位这个节点

  1.  
  2.     public void test_remove_super()
  3.     {
  4.          tableName = "Table1";
  5.          keyName = "superkeytest";
  6.          superColumnFamily = "Super1";
  7.          superColumn = "superColumn3";
  8.          columnName = "stardcolumninsuper1";
  9.          path = superColumnFamily+":"+superColumn+":"+columnName;
  10.        
  11.         try {
  12.             //先建立一个super_column_family 名字测试的时候是"superColumn3"
  13.             //产生1个superColumn元素
  14.             //首先产生1个column_t的list
  15.             List Clist = new ArrayList();
  16.             //当两个名字一样的时候,先前的会被覆盖
  17.             Clist.add(newcolumn_t("stardcolumninsuper1","stardcolumn1".getBytes(),.currentTimeMillis()));
  18.             Clist.add(newcolumn_t("stardcolumninsuper2","stardcolumn2".getBytes(),.currentTimeMillis()));
  19.             //产生一个superColumn元素
  20.              superColumnName = "superColumn3";
  21.             superColumn_t sct = new superColumn_t(superColumnName , Clist);
  22.             //将这个元素装入到一个superColumn_t的List中
  23.             List SClist = new ArrayList();
  24.             SClist.add(sct);
  25.             //将这个super_column 的list连同对应的superColumnFamily的名字一起放入一个hashmap中
  26.             Map> cfmap = new HashMap>();
  27.             cfmap.put(superColumnFamilyName, SClist);
  28.             //区别于一般的,这里要求的column元素是superColumn元素
  29.             //将整理好的信息关联一个key后生成一个mutation
  30.             batch_mutation_super_t bmst = newbatch_mutation_super_t(tableName,keyName,cfmap);
  31.             boolean block = true;
  32.             //执行这个mutation的插入操作
  33.             cli.batch_insert_superColumn(bmst, block);
  34.        
  35.             //尝试删除之
  36.             cli.remove(tableName, keyName, path, .currentTimeMillis(),true);
  37.         } catch (InvalidRequestException e) {
  38.             e.printStackTrace();
  39.         } catch (UnavailableException e) {
  40.             e.printStackTrace();
  41.         } catch (TException e) {
  42.             e.printStackTrace();
  43.         }
  44.     }
  45.  

17)//这个方法目前还不健全

  1.  
  2.     public void test_getProperty()
  3.     {
  4.         try {
  5.             //这事一个未健全的方法,现在只能返回对应"tables"的参数,也就是表名
  6.             List Plist = cli.getStringListProperty("tables");
  7.             for(int i = 0 ; i < Plist.size() ; i++){
  8.                 .out.println(Plist.get(i));
  9.             }
  10.         } catch (TException e) {
  11.             // TODO Auto-generated catch block
  12.             e.printStackTrace();
  13.         }
  14.         //现在只支持如下三个参数
  15.         try {
  16.             .out.println(cli.getStringProperty("cluster name"));
  17.             //会直接把server端的storage_conf.xml读进来,可能用于做进一步的xml分析
  18.             .out.println(cli.getStringProperty("config file"));
  19.             .out.println(cli.getStringProperty("version"));
  20.         } catch (TException e) {
  21.             e.printStackTrace();
  22.         }
  23.     }
  24.  

一些注意的:
1)cli的实例还有一些诸如sent_*和recv_*(成对出现)的公共方法,这些方法是供上面罗列的相应方法调用的,一般不用管,
2)sent_*负责想服务器端发送消息
3)recv_*将处理返回的所要的结果或处理错误信息抛出相应异常
4)大部分方法可执行的前提是必须有一个精确的key信息,(describe_table和get_key_range除外)。
5)一个superColumnFamily中只能存放superColumn_t元素而不能存放column_t元素
6)一个columnFamily中只能存放column_t元素

1)columnFamily下一个column和多个column的读取区别
2)columnfamily 和superColumnFamily的读取区别

测试机数量:两台,jvm最大使用内存都开到1.3G。

起始key: 1356278962 ;

改变组:
product_name1    :    “是一个非常可靠的大规模分布式存储系统”
product_name2    :    “中国惨败伊朗丢亚锦赛冠军创34年参赛最耻辱一败”

控制组:
product_value1    :    “第一次在主场丢冠军”
product_value2    :    “胡雪峰顶替受伤的刘炜”
product_value3    :    “朱芳雨都有外线出手机会”
product_value4    :    “张庆鹏传球意图太过明显”
product_value5    :    “最后一节比赛”
product_value6    :    “中国队首发:易建联、王治郅、朱芳雨、王仕鹏、胡雪峰”
product_value7    :    “中国队本次亚锦赛首次尝到失利的滋味,在家门口把冠军拱手相让”
product_value8    :    “下半场易边再战,中国队仍然如同梦游,球员之间没有形成整体”

//下面这个是一个要存入的“摘要”
product_value9    :    “下半场易边再战,中国队仍然如同梦游,球员之间没有形成整体,
            单打独斗的进攻模式成功率相当低。伊朗队内外结合,多点得分,
            继续扩大分差。朱芳雨传球被断,对手长传快攻,14号球员扣篮得分,
            28-53。王治郅强攻得手,造成哈达迪犯规,加罚命中。
            王治郅再次溜到篮下,反身投篮得分。王治郅成为中国队的唯一亮点,
            持球接连晃过三名球员的防守,投篮得分,加罚再中,
            36-53。靠着王治郅的出色发挥,中国队留住翻盘的一线希望。
            第三节结束,39-56,分差仍为17分。”

   
我们有的ColumnFamily: Standard1 Standard2 Super1 Super2

测试1:    向Standard1中写入10万条记录,此时Standard1中只有”product_name”一个column,key是从1356278962开始往后10万个

    insert()进行插入,速度很慢,不可能在一小时内完成
    CQL 用时256秒,关掉log后用时55秒

测试2:    然后在product_name1 和 product_name2之间反复修改key-1356279962对应的”produck_name”这个column的内容10万次
    CQL:

    当config中的ReplicationFactor为1的时候,用时120秒
    当config中的ReplicationFactor为2的时候,用时183秒;关掉log后用时42秒

   
测试3:    将存在的各个key的product_name读取一遍(此时相应columnFamily中只有1个column)
    当config中的ReplicationFactor为1的时候:速度相当慢
    当config中的ReplicationFactor为2的时候:

        CQL:

        用时267秒;关掉log后用时145秒

        API:
        用get_column用时203秒;关掉log后用时135秒

以下均以ReplicationFactor=2来进行测试

测试4:    依照已经存在的各个key,向Standard1中写入10万条控制组里面的column数据
    API:

    batch_insert() 速度非常慢

    CQL:
    90万个column元素,其中包括一个类似摘要大小的字符串(200字左右),用时2004秒;关掉log后用时512秒。

测试5:    然后在product_name1 和 product_name2之间反复修改key-1356279962对应的”produck_name”这个column的内容10万次

    API:
    使用insert()速度相当慢

    CQL:
    用时190秒;关掉log后用时45秒

测试6:    将存在的各个key的product_name读取一遍(此时相应columnFamily中已经有10个column了)

    API:

    使用get_column()用时757秒;关掉log后用时188秒

    CQL:

    用时更慢一些,用时861秒;关掉log后用时202秒

super测试1:在Super1中创建superColumn1,在superColumn1中只创建1个column-”product_name”,然后写入10万条数据,key是从1356278962开始往后10万个

    CQL:

    用时316秒;关掉log后用时60秒
super测试2:然后在product_name1 和 product_name2之间反复修改superColumn1下key-1356279962对应的”produck_name”这个column的内容10万次
    CQL:

    用时195秒;关掉log后用时62秒
super测试3:将存在的各个key的product_name读取一遍(此时相应superColumnFamily中只有1个column)

    API:

    get_column() 用时235秒;关掉log后用时234秒

    CQL:

    用时356秒 ;关掉log后用时158秒

super测试4:依照已经存在的各个key,依次向superColumn1中写入10万条控制组里面的column数据

    CQL:

    用时2058秒;关掉log后,竟然非常慢,不知道为什么,但是重新启动下节点后,速度变快,用时562秒
super测试4:然后在product_name1 和 product_name2之间反复修改superColumn1下key-1356279962对应的”produck_name”这个column的内容10万次

   CQL:

   用时190秒,关掉log后用时48秒
super测试6:将存在的各个key的product_name读取一遍(此时相应superColumnFamily中已经有10个column了)

    API:

    用get_column 用时 356秒;关掉log后用时191秒

    CQL:

    用时314秒;关掉log后用时208秒

结论:使用superColumn的开销不比column大很多,向columnFamily中加入更多的column对读取速度的影响不大。相比而言受log和ReplicationFactor的影响更大。另外在写入的时候CQL的效率更高,在读取的时候get_column更好一些。而API中的其他方法如batch_insert(),insert()效率明显不高。但这只是两个节点的情况,当有更多节点的时候情况可能又会不一样了。

阅读(729) | 评论(0) | 转发(0) |
0

上一篇:cassandra 学习笔记

下一篇:了解Class loader

给主人留下些什么吧!~~