道理都很好懂,但是做起来很难。书中的技巧也不是非常高明。主旨就是自我激励,潜意识影响。有空随便读读还行。
Monthly Archives: 五月 2012
从mysql向redis中加载数据测试
有测试显示reids如果使用持久化测试后效率会下降,所以不使用持久化。现在来测试一下从mysql中捞取数据加载到redis中的速度。
服务器使用8核2.6 cpu,内存8G,sas硬盘,Centos5.6 64位操作系统。python 2.6 redis2.4.13.
使用测试代码如下,从mysql的photo表中捞取两列数据加载到redis中,这两列在表中都有索引,数据量28万。
#!/bin/env python # ------------------------------------------------- # Filename: # Revision: # Date: 2012-05-27 # Author: simonzhang # Email: simon-zzm@163.com # ------------------------------------------------- import MySQLdb import redis def redis_run(sql_data): try: r = redis.Redis(host='192.168.1.100', password = '123456', port=6379, db=0) except redis.RedisError, e: print "Error %s" % e for i in sql_data: r.set(str(i[0]),i[1]) def mysql_run(sql): try: db = MySQLdb.connect(host='192.168.1.100', user='test', passwd ='123456', db='photo') cursor = db.cursor() except MySQLdb.Error, e: print "Error %d:%s" % (e.args[0],e.args[1]) exit(1) try: result_set = '' cursor.execute('%s' % sql) result_set=cursor.fetchall() cursor.close() db.close() return result_set except MySQLdb.Error, e: print "Error %d:%s" % (e.args[0], e.args[1]) cursor.close() db.close() def main(): _loop = 0 _limit_start = 0 _limit_span = 10000 _count_result = 5 while _count_result > 0: result_data = '' sql = "select id as pid, userid as uid from photo LIMIT %s,%s" % (_limit_start + _limit_span * _loop, _limit_span) result_data = mysql_run(sql) _count_result = len(result_data) redis_run(result_data) _loop += 1 if __name__ == '__main__': main()
进行测试,分别为每次捞取50万,10万,5万,1万,结果如下:
50万
real 0m26.239s
user 0m16.816s
sys 0m5.745s
10万
real 0m24.019s
user 0m15.670s
sys 0m4.932s
5万
real 0m26.061s
user 0m15.789s
sys 0m4.674s
1万
real 0m28.705s
user 0m15.778s
sys 0m4.913s
结论:每次捞取10万效率会比较理想,对于操作系统的压力不大,所以硬件方面不用考虑。
这里两列保存的都是id,加入用户id和照片id长度都是9位,一组数据是18位。一亿组数据也就需要2G内存。
通过计算28万需要24秒,如果有1亿的数据,全部倒入要2个半小时。所以内存存储不是问题。不知道用固态硬盘是否能快,我没有就不知道了。所以要做三件事,一做好集群,将数据及时同步到其他机房,自己写个程序同步定时同步,如果用主从,主机重启了为空,这个就很麻烦了,二使用redis的数据持久化,肯定比从mysql中直接捞快,三天天烧香希望不要宕机。
读<<街头特工行动手册>>
设计的方面还是比较广泛,但是细节不够详细。基本上多看看警匪和特工片就能学到一大部分了。无聊时消遣用书。
读《重说中国近代史》
中国当今社会有很多公认的社会问题,百姓和官员、老者和青年、穷人和富人,在互相谴责着问题由对方产生。其实我们应该静下来,通过学习历史来了解此问题的产生的原因。真正的学校教育让大家对历史头疼不已,但是此书读起来却十分有趣。用历史来反思当今的问题,挖掘当今国人的劣根。
书中写的“三妇心态”,“义和团运动”和“袁世凯的悲剧”让我对近代史有了更细节的了解,也很社会现象有了新的认识。比如中国当前的整体浮躁,总是有人在感慨,但是也搞不清何时开始问什么会这样,书中讲述,大清被打后,开始学习日本,后来学习美国,后来学习俄国,都是浮躁的表现,因为此三国都是学习的欧洲体系,而中国人看到了人家“快速致富”,就急急忙忙去学了并没有追踪寻缘,踏实下来从西方开始研究。日本、美国和俄国高速发展的时候,欧洲的体系也并不稳固,没有必要去学,但是也要研究,更不能拿着快速致富的套路直接套在自己的头上。
十分推荐大家阅读。北洋裂变也不错,我之前买了,有空也拿出来再学习学习。
python 访问接口获得 WSDL 数据
需求访问http://192.168.1.100:8080/Service?wsdl,获取统计数字,接口“Count”参数有“user:string,pwd:string”。
WSDL是Web Service的描述语言,是一种接口定义语言,用于描述Web Service的接口信息等。
首先,安装SOAPpy
easy_install SOAPpy
代码如下:
def get_service(): _url = "http://192.168.1.100:8080/Service?wsdl" _user = "test" _pwd = "test" try: server = SOAPpy.SOAPProxy(_url) get_result = server.Count(_user, _pwd) except: get_result = "Error!" return "%s" % get_result