之前做过python入库到redis的测试 http://www.simonzhang.net/?p=430
今天才发现由于页面生成问题,有部分代码被转译了。借这个机会在同一台机器上再测试一下这两种语言。
测试服务器为一个Xeon(TM)双核3.20GHz 的cpu,内存4G。操作系统为Centos5.4 64位。go1.0.2,python2.6
go环境和redis之前已经有记录,go语言的redis开发包安装也比较简单,但是官方文档中目录有写错。
我的go放在/usr/local/go,我的安装记录如下:
cd /usr/local/go/src/pkg
git clone git://github.com/alphazero/Go-Redis.git redis
cd redis
go install
仍旧用大密码表实验,go语言代码如下:
//www.simonzhang.net
package main
import (
"os";
"log";
"fmt";
"redis";
"encoding/hex"
"crypto/md5"
)
func main () {
spec := redis.DefaultSpec().Db(1).Password("");
//如要操作远程redis服务器连接如下
//spec := redis.DefaultSpec().Host("192.168.1.200").Db(1).Password("123");
client, e := redis.NewSynchClientWithSpec (spec);
if e != nil { log.Println ("failed to create the client", e); return }
var str string
userFile := "big_pass.txt"
fin,err := os.Open(userFile)
defer fin.Close()
if err != nil {
fmt.Println(userFile,err)
return
}
buf := make([]byte, 1)
for{
n,_:= fin.Read(buf)
if 0==n {break}
if string(buf)=="\n"{
h:= md5.New()
h.Write([]byte(str))
key:=hex.EncodeToString(h.Sum(nil));
value:=[]byte(str)
client.Set(key, value);
str=""
}else{
str+=string(buf)
}
}
}
开始测试
go使用build编译运行,cpu使用率在55%左右,load average: 1.98, 1.22, 0.91
real 1m33.310s
user 0m42.586s
sys 0m34.567s
python cpu使用在在80%,load average: 2.19, 1.36, 0.86。
real 1m26.873s
user 0m56.316s
sys 0m19.595s
总结python写redis的东西比较简单。go对字符串做了MD5,入redis时用MD5值做key。
a)都运行完毕python和go录入redis行数与文本行数相同。
b)从大小来看python不到1K,go编译完成2.3M。如果要一处编译,移到其他服务器运行,go编译完的可以直接运行,python还要再装环境。但是有easy_install,所以装环境对我来说比较简单。
c) cpu使用量来看go要比python好一些,在增加md5计算的情况下所用系统资源也比pyhton少,但是应该快不了一倍。
d) 从代码编写的逻辑和难易程度来看,还是python简单一点。
如果要考虑速度可以试试Cpython,我没有试过。