首页 > 数据库 > cassandra 学习笔记(5)

cassandra 学习笔记(5)

2010年3月15日
305 views 评论 发表评论

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()效率明显不高。但这只是两个节点的情况,当有更多节点的时候情况可能又会不一样了。

转:http://blog.csdn.net/pakly_9527/archive/2009/08/17/4456357.aspx

纯净水 数据库 , , ,

  1. 目前还没有任何评论.
  1. 目前还没有任何 trackbacks 和 pingbacks.
  • 粤ICP备09032914号