2011-11-21 11 views
5

Tengo la siguiente situación. Hay muchas consultas en la base de datos (comúnmente escribiendo comentarios, leyendo perfiles, etc.), y creo que habrá más lecturas que escrituras. Quiero tener una buena posibilidad de escalar db a varios servidores. Entonces, y me gusta nosql :) Como entiendo al leer blogs y respuestas para preguntas sobre StackOverflow (por ejemplo this one), la mejor opción en esta situación es usar Cassandra.Cassandra o MongoDB para una buena escala y gran cantidad de consultas

Entonces, la pregunta es: ¿Cassandra es más adecuada para mis propósitos? ¿Por qué?

Y la segunda pregunta será sobre las bibliotecas de cliente asíncronas para Tornado - ¿Conoces algunas implementaciones de esto? Como puede ver en la página wiki vinculada anteriormente, hay clientes asíncronos solo para mongodb y couchdb. Y este hecho también me detiene.

Tal vez ahora pueda usar MongoDB (porque es una biblioteca asíncrona y tal vez en la primera vez será más rápido que Cassandra en varios servidores pero sin asincrónico), y después de un tiempo convertir datos en mongo a cassandra. ¿Qué piensa usted al respecto?

+1

AFAIK no hay adaptadas (asincrónicas) Cassandra libs que se ejecutan dentro de Tornados IOLoop. (ps leer la publicación de Bens sobre hilos: https://github.com/facebook/tornado/wiki/Threading-and-concurrency) – Schildmeijer

+0

¡Gracias por un enlace! ¿Cómo crees que utilizar Cassandra sin sincronización será más rápido que MongoDB con el módulo asíncrono? O tal vez la diferencia será muy poco, y tendré tiempo para escribir mi propia implementación asincrónica. Tal vez simplemente pueda ejecutar un hilo especial para la interacción db, que se comunicará con el hilo de Tornado. – dizpers

+0

Tornado admite twisted, lo que significa que puede usar la biblioteca asincrónica de torsión de teléfono para la compatibilidad con Async Cassandra. – koblas

Respuesta

3

Mitad respuesta, ya que no se trata de idoneidad. Tornado 2.1 admite retorcidos como un patrón asincrónico, lo que significa que puede usar la biblioteca de Cassandra de telefonía (retorcida + Cassandra) para tener acceso asincrónico a Cassandra.

import tornado.platform.twisted 
    from telephus.pool import CassandraClusterPool 
    from twisted.internet import reactor 

    tornado.platform.twisted.install() 

    from twisted.internet import reactor 

    pool = CassandraClusterPool([HOST], keyspace='XXXX', reactor=reactor) 

    pool.startService() 

    reactor.run()  # this calls tornado.ioloop.IOLoop.instance().start() 

Dicho esto, estoy usando MongoDB y mongoengine (no asíncrona) para algunos proyectos personales en el momento y Cassandra + Telephus para proyectos de trabajo. Estoy haciendo concesiones en términos de modelos de datos flexibles frente a modelos de datos fijos y rendimiento.

Cuestiones relacionadas