2011-11-21 18 views
5

Mam następującą sytuację. Istnieje wiele zapytań do bazy danych (zwykle pisanie komentarzy, czytanie profili, itp.), I myślę, że będzie więcej czyta niż pisze. Chcę mieć dobrą możliwość skalowania db do kilku serwerów. Tak więc i lubię nosql :) Jak rozumiem czytając blogi i odpowiedzi na pytanie dotyczące StackOverflow (na przykład this one) najlepszym wyborem w tej sytuacji jest użycie Cassandra.Cassandra lub MongoDB dla dobrego skalowania i dużej ilości zapytań

Zatem pytanie brzmi - czy Cassandra jest bardziej odpowiednia dla moich celów? Czemu?

Drugie pytanie dotyczy bibliotek asynchronicznych klienta dla Tornado - czy znasz jakieś implementacje tego? Jak widać na powyższej stronie wiki, klienci async tylko dla mongodb i couchdb. I ten fakt także mnie zatrzymuje.

Może teraz mogę użyć MongoDB (przyczyna asysty, która powstaje, a może za pierwszym razem będzie szybsza niż Cassandra na kilku serwerach, ale bez asynchronizacji), a po pewnym czasie konwertuje dane w Mongo na Kasandra. Co o tym myślisz?

+1

AFAIK nie ma żadnych gotowych (async) licencji Cassandra, które działają w Tornados IOLoop. (ps przeczytać post Bens o wątkach: https://github.com/facebook/tornado/wiki/Threading-and-currency) – Schildmeijer

+0

Thx za link! Jak myślisz, czy użycie Cassandra bez asynchronizacji będzie szybsze niż MongoDB z modułem asynchronicznym. A może różnica będzie bardzo mała - i będę miał czas na napisanie własnej implementacji asynchronicznej. Może mogę po prostu uruchomić specjalny wątek dla interakcji db, który będzie komunikował się z wątkiem Tornada. – dizpers

+0

Tornado obsługuje skręcony, co oznacza, że ​​możesz użyć asynchronicznej biblioteki skręconej telephus do obsługi Async Cassandra. – koblas

Odpowiedz

3

Połowa odpowiedzi - ponieważ nie chodzi o przydatność. Tornado 2.1 obsługuje skręcony jako asynchroniczny wzór, co oznacza, że ​​możesz użyć telepuskiej biblioteki Cassandra (skręconej + Cassandry), aby mieć asynchroniczny dostęp do Cassandry.

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

To powiedziawszy, używam MongoDB i mongoengine (non-asynchroniczny) dla niektórych osobistych projektów w tej chwili i Cassandra + Telefos projektów pracy. Robię kompromis pod względem elastycznych modeli danych w porównaniu ze stałymi modelami danych i wydajnością.

Powiązane problemy