Descubrí mongodb hace algunos meses, y después de leer este post, pensé que mongodb era realmente más rápido que mysql, así que decidí construir mi propio banco, el problema es que no tengo el mismo resultado que el autor del post anterior, especialmente para consultar la base de datos: mongodb parece ser más lento que las tablas MyISAM. Podría echar un vistazo a mi código Python, puede ser que hay algo malo en ella:MongoDB no es más rápido que 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
Notas:
- tanto MySQL y mongodb están en locahost.
- tanto MySQL y mongodb tiene la columna 'clave' indexado
MySQL Tabla:
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;
versiones son:
- MySQL: 5.1.41
- mongodb: 1,8 .3
- python: 2.6.5
- pymongo: 2.0.1
- Linux: Ubuntu 2.6.32 32Bits con PAE
- Hardware: Escritorio i7 núcleo 2,93 Ghz
Resultados (por 1 millón de partes movibles/selecciona):
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)
Por un lado, a MongoDB le gusta una arquitectura de 64 bits. No pondría mucho inventario en un benchmark dirigido por alguien que no tenga mucha experiencia con uno de los sistemas que se están evaluando. – ceejayoz
¡es por eso que pedí ayuda! – Eric
@ceejayoz Si tiene que tener mucha experiencia para hacerlo rápido, será lento para la mayoría de los usuarios. Yo diría que los puntos de referencia hechos por usuarios inexpertos podrían ser tan útiles ... –