Tengo que elegir Cassandra o MongoDB (u otra base de datos nosql, acepto sugerencias) para un proyecto con muchas inserciones (1M/día). Así que creo una pequeña prueba para medir el rendimiento de escritura. Aquí está el código para insertar en Cassandra:Cassandra bajo rendimiento?
import time
import os
import random
import string
import pycassa
def get_random_string(string_length):
return ''.join(random.choice(string.letters) for i in xrange(string_length))
def connect():
"""Connect to a test database"""
connection = pycassa.connect('test_keyspace', ['localhost:9160'])
db = pycassa.ColumnFamily(connection,'foo')
return db
def random_insert(db):
"""Insert a record into the database. The record has the following format
ID timestamp
4 random strings
3 random integers"""
record = {}
record['id'] = str(time.time())
record['str1'] = get_random_string(64)
record['str2'] = get_random_string(64)
record['str3'] = get_random_string(64)
record['str4'] = get_random_string(64)
record['num1'] = str(random.randint(0, 100))
record['num2'] = str(random.randint(0, 1000))
record['num3'] = str(random.randint(0, 10000))
db.insert(str(time.time()), record)
if __name__ == "__main__":
db = connect()
start_time = time.time()
for i in range(1000000):
random_insert(db)
end_time = time.time()
print "Insert time: %lf " %(end_time - start_time)
Y el código para insertar en Mongo es lo mismo cambiar la función de conexión:
def connect():
"""Connect to a test database"""
connection = pymongo.Connection('localhost', 27017)
db = connection.test_insert
return db.foo2
Los resultados son ~ 1046 segundos para insertar en Cassandra, y ~ 437 para terminar en Mongo. Se supone que Cassandra es mucho más rápido que Mongo al insertar datos. Entonces, ¿Qué estoy haciendo mal?
¿Se han probado de nuevo con más hilos, de ser así se puede compartir los resultados? – sirmak