几个月前我发现了mongodb,在看完这个post之后,我想mongodb比mysql真的快,所以我决定建立自己的工作台,问题是我没有和上述文章的作者相同的结果,尤其是对于查询数据库:mongodb似乎比MyISAM表慢。你可以看看我的Python代码,可能是有什么不对的吧:MongoDB不比MySQL快吗?
from datetime import datetime
import random
import MySQLdb
import pymongo
mysql_db=MySQLdb.connect(user="me",passwd="mypasswd",db="test_kv")
c=mysql_db.cursor()
connection = pymongo.Connection()
mongo_db = connection.test
kvtab = mongo_db.kvtab
nb=1000000
thelist=[]
for i in xrange(nb):
thelist.append((str(random.random()),str(random.random())))
t1=datetime.now()
for k,v in thelist:
c.execute("INSERT INTO key_val_tab (k,v) VALUES ('" + k + "','" + v + "')")
dt=datetime.now() - t1
print 'MySQL insert elapse :',dt
t1=datetime.now()
for i in xrange(nb):
c.execute("select * FROM key_val_tab WHERE k='" + random.choice(thelist)[0] + "'")
result=c.fetchone()
dt=datetime.now() - t1
print 'MySQL select elapse :',dt
t1=datetime.now()
for k,v in thelist:
kvtab.insert({"key":k,"value":v})
dt=datetime.now() - t1
print 'Mongodb insert elapse :',dt
kvtab.ensure_index('key')
t1=datetime.now()
for i in xrange(nb):
result=kvtab.find_one({"key":random.choice(thelist)[0]})
dt=datetime.now() - t1
print 'Mongodb select elapse :',dt
注:
- MySQL和MongoDB的是对的locahost。
- MySQL和MongoDB的具有 '关键' 列索引
MySQL表:
CREATE TABLE IF NOT EXISTS `key_val_tab` (
`k` varchar(24) NOT NULL,
`v` varchar(24) NOT NULL,
KEY `kindex` (`k`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
版本:
- MySQL的:5.1.41
- 的MongoDB:1.8 .3
- python:2.6.5
- pymongo:2.0.1
- Linux操作系统:Ubuntu的2.6.32 32位与PAE
- 设备:桌面核i7 2.93千兆赫
结果(100万个插入/选择):
MySQL insert elapse : 0:02:52.143803
MySQL select elapse : 0:04:43.675914
Mongodb insert elapse : 0:00:49.038416 -> mongodb much faster for insert
Mongodb select elapse : 0:05:10.409025 -> ...but slower for quering (thought was the opposite)
首先,MongoDB喜欢64位架构。对于那些对基准系统之一不太熟悉的人来说,我不会投入太多库存。 – ceejayoz
这就是为什么我要求一些帮助! – Eric
@ceejayoz如果你必须非常有经验才能使它快速发展,那么对于大多数用户来说,它会很慢。我认为没有经验的用户制定的基准测试可能同样有用...... –