2011-11-21 9 views
5

Ho la seguente situazione. Ci sono molte query sul database (comunemente scrivendo commenti, profili di lettura, ecc ...), e penso che saranno più letture che scritture. Voglio avere una buona possibilità di ridimensionare db su diversi server. Quindi, e mi piace nosql :) Come ho capito leggendo blog e risposte alla domanda su StackOverflow (ad esempio this one) la scelta migliore in questa situazione è usare Cassandra.Cassandra o MongoDB per una buona scalabilità e una grande quantità di domande

Quindi, la domanda è: Cassandra è più adatta ai miei scopi? Perché?

E la seconda domanda riguarda le librerie client asincrone per Tornado - conosci alcune implementazioni di questo? Come puoi vedere nella pagina wiki linkata sopra ci sono solo client async per mongodb e couchdb. E questo fatto mi ferma anche.

Forse ora posso usare MongoDB (causa di esinzioni di libreria asincrona e forse in prima volta sarà più veloce di Cassandra su diversi server ma senza asincrono), e dopo qualche tempo convertire i dati in mongo in cassandra. Cosa ne pensi?

+1

AFAIK non ci sono librerie Cassandra personalizzate (asincroni) che girano all'interno di Tornado IOLoop. (ps leggi il post di Bens sui thread: https://github.com/facebook/tornado/wiki/Threading-and-concurrency) – Schildmeijer

+0

Thx per un collegamento! Come pensi - userà Cassandra senza async essere più veloce di MongoDB con il modulo asincrono. O forse la differenza sarà molto piccola - e avrò il tempo di scrivere la mia implementazione asincrona. Forse posso semplicemente eseguire thread speciali per l'interazione db, che comunicheremo con il thread di Tornado. – dizpers

+0

Tornado supporta twistato, il che significa che è possibile utilizzare la libreria twistata telegramma asincrono per il supporto Async Cassandra. – koblas

risposta

3

Half answer - dal momento che non si tratta di idoneità. Tornado 2.1 supporta il twistato come un pattern asincrono, il che significa che è possibile utilizzare la libreria Cassandra del telephus (twistato + Cassandra) per avere accesso Cassandra asincrono.

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() 

Detto questo, sto usando MongoDB e mongoengine (non asincrona) per alcuni progetti personali al momento e Cassandra + Telefo per progetti di lavoro. Sto facendo un compromesso in termini di modelli di dati flessibili rispetto a modelli di dati fissi e prestazioni.

Problemi correlati