分类:
2010-09-11 16:13:26
16)
//尝试删除一个superColumn节点,和属于该节点的column_t节点
//测试需要通过path来定位这个节点
17)//这个方法目前还不健全
一些注意的:
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()效率明显不高。但这只是两个节点的情况,当有更多节点的时候情况可能又会不一样了。